Шлюз увидел «user», сервис увидел «admin», а JSON был один и тот же

badcasedaily1 34 минуты назад Краткое содержание статьи Шлюз увидел «user», сервис увидел «admin», а JSON был один и тот же Средний 9 мин 1.2K Блог компании OTUS Java * Программирование * JavaScript * Информационная...
Will Anthropic have the best AI model at the end of October 2026?
В сфере искусственного интеллекта произошло заметное событие. badcasedaily1 34 минуты назад Краткое содержание статьи Шлюз увидел «user», сервис увидел «admin», а JSON был один и тот же Средний 9 мин 1. 2K Блог компании OTUS Java * Программирование * JavaScript * Информационная безопасность * Аналитика Привет, Хабр! Принято считать, что JSON — самая скучная часть системы.
Формат простой, парсер есть в любом языке, сломаться там нечему. Скорее спорят, как назвать поле, чем о том, что оно значит. На деле JSON описывает синтаксис и почти ничего не говорит о смысле.
Технические детали
Что делать с двумя одинаковыми ключами в одном объекте, сколько знаков держит число, можно ли записать NaN — на всё это стандарт отвечает «на усмотрение реализации». Каждая библиотека усмотрела по‑своему. Пока JSON пишет и читает один и тот же сервис, этого не видно.
Как только между ними оказывается второй язык или второй парсер, один и тот же текст начинает означать разные вещи. В статье рассмотрим пять таких расхождений, и все они растут из одного пробела в стандарте. Начнём с самого неприятного, после которого страдают права доступа.
Два ключа roleВозьмём объект, в котором один ключ встречается дважды:{"user": "u42", "role": "user", "role": "admin"}Это валидный JSON. RFC 8259, текущая версия стандарта от декабря 2 017 года, говорит, что имена внутри объекта SHOULD be unique, то есть «желательно». И тут же предупреждает: если имена не уникальны, поведение получателя непредсказуемо.
Отраслевые последствия
Одни берут последнюю пару, другие падают с ошибкой, третьи отдают обе. Я прогнал этот объект:{"role": "user", "role": "admin"} Python json admin orjson 3. 13 admin pysimdjson 7.
parse admin Go, encoding/json admin Go 1. 27, encoding/json/v2 ошибка: duplicate object member name "role" Jackson 2. 18 admin Jackson + STRICT_DUPLICATE ошибка: Duplicate field 'role' PostgreSQL json хранит оба ключа, ->> отдаёт admin PostgreSQL jsonb admin jq 1.
7 adminБольшинство берёт последнее значение, и легко решить, что так делают все. Но pysimdjson, обёртка над simdjson, которую ставят ради скорости, отдаёт первое. 27, вышедшей в августе 2 026 года, стоит на новом движке encoding/json/v2.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.






