В версии 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: