В Go 1.27 появился стабильный API для работы с JSON

В Go 1.27 появился стабильный API для работы с JSON

Изображение: OpenAI

В Go 1.27 появился стабильный API для работы с JSON: устранить ограничения прежнего пакета без нарушения совместимости было практически невозможно. Новый API по умолчанию отклоняет JSON с некорректным UTF-8 и повторяющимися именами полей, сообщили разработчики в The Go Blog.

В тестах разработчиков разбор JSON оказался до 10 раз быстрее, чем при использовании прежнего encoding/json. Скорость сериализации осталась примерно на прежнем уровне: в одних случаях новый пакет немного быстрее, в других немного медленнее. Для большего выигрыша авторы рекомендуют адаптировать собственные методы сериализации и разбора к новым потоковым интерфейсам.

Строгие проверки снижают риск разного толкования одних и тех же входных данных. Прежний пакет принимает повторяющиеся имена полей, хотя разные реализации могут трактовать такой объект по-разному. Авторы напоминают, что эту неоднозначность уже использовали в атаках, в том числе при эксплуатации CVE-2017-12635. Новый API также учитывает регистр при сопоставлении имён полей JSON с полями структур Go, а срезы и словари со значением nil сериализует как пустой массив и пустой объект JSON соответственно.

Пакет encoding/json/jsontext позволяет читать и записывать JSON по частям, не загружая всё значение в память целиком. В encoding/json/v2 параметры поведения можно передавать непосредственно функциям сериализации и разбора, а затем использовать их внутри собственных обработчиков.

Переходить на новый API необязательно: разработчики обещают бессрочно поддерживать encoding/json. При миграции параметры позволяют сохранить те особенности прежнего поведения, от которых зависит приложение.

Сергей
Автор: Сергей
Пишу о кибербезопасности и информационных технологиях на простом и понятном языке
Комментарии:

Как мы обрабатываем данные: политика обработки персональных данных