A new experimental Go API for JSON
Новый экспериментальный JSON-API в Go
Go 1.25 предлагает encoding/json/v2 и encoding/json/jsontext — переработанные пакеты для работы с JSON. Они решают давние проблемы стандартного encoding/json и пока доступны только по флагу GOEXPERIMENT=jsonv2.
Главные недостатки старого API
- Неточности синтаксиса: принимает невалидный UTF-8, дублирует ключи, трактует числа как float64.
- Производительность: 2-3× медленнее современных альтернатив; каждый вызов тратит память на рефлексию.
- Гибкость: нельзя пропустить неизвестные поля, работать с потоковым JSON, получать исходный текст, сохранять порядок ключей, использовать сторонние типы.
Что нового в v2
-
Три пакета
–jsontext— низкоуровневое чтение/запись токенов, сохраняет формат.
–json— высокоуровневый marshal/unmarshal, совместим с v1, но строже и быстрее.
–jsontextможно использовать отдельно для потоковой обработки. -
Строгость
UTF-8 проверяется, дубли ключей — ошибка, числа не теряют точность. -
Производительность
Без рефлексии в hot-path, 2-3× быстрее, меньше аллокаций. -
Новые возможности
Пропуск неизвестных полей, сохранение порядка, работа сany, доступ к сырому JSON, совместимость с v1 через теги.
Как попробовать
GOEXPERIMENT=jsonv2 go mod download
import "encoding/json/v2"
Фидбек приветствуется: golang.org/issue/71497.