В Голанге, в чем разница между кодировкой json и сортировкой

В чем разница между кодировкой/декодированием JSON и сортировкой/разборкой JSON?

Пытаясь научиться писать RESTFUL api в golang и не уверен, какая разница между кодировкой JSON и маршаллингом, или если они одинаковы?

Ответ 1

  • Маршал = > Строка
  • Encode = > Stream

Маршал и Unmarshal конвертируют JSON в строку и наоборот. Кодирование и декодирование преобразуют JSON в поток и наоборот.

Нижеприведенный код показывает работу маршала и немаршала

type Person struct {
First string
Last string
}
func main() {
    /* This will marshal the JSON into []bytes */

    p1 := Person{"alice", "bob"}
    bs, _ := json.Marshal(p1)
    fmt.Println(string(bs))

    /* This will unmarshal the JSON from []bytes */

    var p2 Person
    bs = []byte(`{"First":"alice","Last":"bob"}`)
    json.Unmarshal(bs, &p2)
    fmt.Println(p2)

}

Кодер и декодер записывают структуру в срез потока или считывают данные из среза потока и преобразуют его в структуру. Внутри он также реализует метод маршала. Единственное отличие состоит в том, что если вы хотите играть с строкой или байтами, используйте маршал, и если какие-либо данные вы хотите прочитать или записать в какой-либо интерфейс записи, используйте кодировки и декодируйте.

Ответ 2

Как правило, кодирование/декодирование JSON относится к процессу фактического чтения/записи символьных данных в строку или двоичную форму. Marshaling/Unmarshaling относится к процессу отображения типов JSON из типов данных и примитивов Go и Go.

Фактическое кодирование может включать в себя такие вещи, как сериализация символов юникода, например. Я думаю, что они могут использоваться несколько взаимозаменяемо в документации иногда, потому что они обычно происходят на одном и том же этапе. Например, функция Marshal определит, какой тип JSON должен маршировать что-то, а затем он будет закодирован в строковой форме (который может включать в себя другие данные, такие как специальные символы, если его текстовые данные).

Вы можете проконсультироваться с документами go json package для получения более подробной информации о том, как работают маршалинг/unmarshaling.

Ответ 3

func Encode - это метод Encoder, который записывает типы Go, кодированные JSON, в выходной поток (func NewEncoder берет io.Writer и возвращает * Encoder).

Типы Go входят в черный ящик и записываются в поток в форматировании JSON.

Маршал - это функция, которая возвращает JSON-кодирование типов Go.

Здесь типы Go входят в черный ящик и выходят из коробки в форматировании JSON.

Хорошо документировано: golang.org/pkg/encoding/json/

Ответ 4

Я не могу согласиться с @vinit, маршал кодирует t интерфейса типа {} в Json, и t может фактически иметь строку, struct, integer, pointer.

NewCoder (r io.Reader) и Encode (v interface {}), с другой стороны, кодирует v интерфейса типа {} в поток r.

NOT JUST String.