Пакет encoding
определяет интерфейсы, общие для других пакетов, которые преобразуют данные в байтовые или текстовые представления и обратно. Пакеты, которые проверяют эти интерфейсы, включают например encoding/json
и encoding/xml
. В результате однократная реализация интерфейса может сделать тип полезным в нескольких форматах. Стандартные типы, реализующие эти интерфейсы, включают time.Time и net.IP.
Пакет encoding/json реализует кодирование и декодирование для формата JSON, описанного в RFC7159.Давайте рассмотрим основные функции этого пакета.
func Marshal(v interface{}) ([]byte, error)
Функция Marshal
возвращает
Вот таблица соответствия между типами данных Golang и JSON.
Для того, чтобы представить структуру как JSON, нужно использовать специальные теги:
// Это поле структуры будет представлено в JSON объекте как "myName"
Field int `json:"myName"`
// То же самое, что и в предыдущем примере, только если поле пустое, то его не будет в JSON объекте.
Field int `json:"myName,omitempty"`
// Если не указать название поля, то будет использовано имя по умолчанию - "Field"
Field int `json:",omitempty"`
// Поле будет проигнорировано при сериализации этой структуры.
Field int `json:"-"`
// Поле будет представлено с ключом "-"
Field int `json:"-,"`
// Если указать опцию string, то поле будет представлено как UTF-8 строка JSON.
Int64String int64 `json:",string"`
Обратите внимание, что поля должны быть публичными, то есть иметь имя начинающееся с буквы верхнего регистра! В противном случае они будут проигнорированы в процессе сериализации.
func Unmarshal(data []byte, v interface{}) error
Функция Unmarshal
разбирает предоставленный слайс байт data
в объект, переданный вторым аргументом. Возвращает ошибку, если она произошла в процессе разбора данных. Обычно вторым объектом передается указатель на тот или иной объект.
Если попытаться разобрать объект в интерфейс, то пакет будет использовать следующее соответствие типов JSON типам Golang:
Для более полного ознакомления с особенностями работы с JSON в Golang рекомендуем ознакомиться с этой статьей.