Hacker News Digest

09 сентября 2025 г. в 14:54 • go.dev • ⭐ 243 • 💬 82

OriginalHN

#go#json#utf-8#performance#encoding#api#reflection

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.