В версии 1.25, которая выйдет этой осенью появится JSON v2. Это не значит, что нужно обязательно переходить на
эту версию, однако ознакомиться с её функционалом будет полезно. Пакет реализован с использованием дженериков.
Находится в директории v2 в encoding/json
. Состоит всего из 7 функций. Также появился
encoding/json/jsontext
- это такой движок, а точнее потоковый токенайзер и парсер JSON объектов.
Можно получать последовательно токены, анализировать, писать токены. v2 же занимается
меппингом из внутреннего представления в типы Go и наоборот. Планируется, что v1 и v2 будут работать на базе
jsontext
пакета.
Маршалинг в v2 по скорости остался почти такой же, а вот анмашралинг ускорился от 3 до 10 раз.
MarshalWrite
и UnmarshalRead
для работы с одним JSON-объектом.
Добавлены опции, которые позволяют конфигурировать как будет работать маршалинг и анмаршалинг. Можно использовать
опции из пакета json/v2
и из json/jsontext
string
в первой версии{}
по-умолчанию, но можно переопределитьomitzero
в json теге при объявлении поля структуры
Добавлены опции вроде inline
для embed (встроенных) структур и unknown
.
Последняя очень полезна для отладки - позволяет при Unmarshal накапливать все необъявленные в структуре Go
поля: Data map[string]any `json:",unknown"`
Для кастомного маршалинга по-прежнему поддерживаются MarshalJSON
и UnmarshalJSON
, но
рекомендуется для повышения производительности использовать MarshalJSONTo
и UnmarshalJSONFrom
.
Важные резличия v1 и v2: