Кратко

  • RFC 9535 определяет вычисление запроса JSONPath над конкретным значением JSON и результат в виде списка из нуля или более узлов. Каждый узел имеет ровно один нормализованный путь в этом значении.
  • $['approvals'][3] точно указывает на четвёртое согласование сейчас, но после вставки элемента в начало та же строка может указать на другое. Уникальность позиции не равна постоянству личности.
  • Пустой список, JSON null, повторный выбор и индекс вне диапазона — разные состояния. Для важного решения нужно связать вход, запрос, реализацию, результат и правило.

Координата не становится паспортом из-за точной записи.

В 9:00 $['approvals'][3] находит согласование одного сотрудника. Через пять минут в начало массива добавляют более раннюю заявку. Запрос не изменился, остаётся корректным и возвращает один узел, но позицию занимает уже другой человек. Система, сохранившая только путь, не сможет доказать, что именно видела в 9:00.

Это не противоречит RFC 9535. Документ, опубликованный на Standards Track IETF в феврале 2024 года, задаёт вычисление запроса над одним значением JSON — аргументом запроса — и получение списка узлов. Узел объединяет значение и его место в этой конкретной входной структуре. Стандарт делает выбор переносимым, но не подтверждает источник и деловой смысл поля.

Каноническая форма фиксирует место

Нормализованный путь использует канонические скобки и экранирование, чтобы определить один узел. Для каждого узла в данном значении существует один такой путь. Это удобно для тестов, сравнения результатов, последующей обработки и явного удаления дубликатов.

Но в пути нет хеша документа, версии, происхождения, схемы или стабильного ID. Даже отрицательный индекс зависит от фактической длины массива: нормализованная форма записывает вычисленную неотрицательную позицию. Изменение длины способно разорвать логическую связь.

JSON Pointer в RFC 6901 также определяет место в известной структуре, а нормализованный путь можно преобразовать в pointer. Новая запись координаты не создаёт исторической непрерывности.

Пустота не объясняет причину

Пустой список узлов — допустимый результат. Индекс вне диапазона просто выбирает меньше узлов, последующие сегменты остаются пустыми. Это не то же самое, что синтаксическая ошибка, тайм-аут, ограничение ресурсов или отказ парсера.

Это и не JSON null: null — присутствующее значение, а отсутствующий член не создаёт узла. Если правило доступа сводит оба случая к одному false, движок может работать верно, а политика — ошибаться.

Повторно выбранные узлы сохраняются как дубликаты. count() считает узлы, а не уникальные значения или деловые сущности. Если допустимо несколько порядков, два запуска могут вернуть разные, но корректные последовательности. «Взять первый» — правило приложения, если порядок не определён отдельным контрактом.

Согласованная механика не удостоверяет данные

RFC 8259 определяет JSON и предупреждает о повторных именах членов; RFC 7493 снижает неопределённость профилем I-JSON. RFC 9485 задаёт общий профиль регулярных выражений для match() и search(). Реестр IANA хранит расширения, а application/jsonpath обозначает документы запросов.

Эти соглашения помогают двум системам выбрать одинаковые узлы. Они не доказывают, что owner — юридический владелец, данные свежие, а источник уполномочен. RFC 9537 показывает границу: JSONPath указывает место скрытого поля в ответе RDAP, но не открывает значение и не подтверждает правомерность политики сокрытия.

Безопасность начинается до вычисления

RFC 9535 предостерегает от передачи фрагментов в eval языка реализации. Подставляемые имена, индексы и сравнения нужно проверять и экранировать. Наивный рекурсивный спуск способен вызвать чрезмерную нагрузку CPU или переполнение стека. Правильная грамматика требует ограниченных ресурсов и отдельных режимов отказа.

UTF-8 из RFC 3629 и соображения модели данных RFC 8949 упорядочивают представление, но не происхождение. Полная цепочка связывает исходные байты, разобранное значение, запрос, реализацию и расширения, список узлов, интерпретацию и решение.

Квитанция для повторения решения

Для контроля доступа, соответствия, политики маршрутизации или расследования сохраните вход либо его хеш и происхождение; парсер и обработку повторных имён; точный запрос и тип носителя; переменные до и после проверки; реализацию, версию и расширения; временные и ресурсные пределы; нормализованные пути и допустимые значения; последующую дедупликацию и сортировку; схему, политику, участника, время и итог.

Такая квитанция доказывает: X выполнил Q над входом с хешем H при пределах L и получил эти места. Для утверждения «та же запись, что вчера» нужны стабильный ID схемы и связь между версиями.

Источники и ограничения

Официальная запись включает HTML, текст, информационную страницу, Datatracker, историю и поиск исправлений. Репозиторий группы показывает разработку, а сравнение JSONPath — прежнюю фрагментацию.

Использованы также RFC 8259, 7493, 9485, 6901, 8949, 3629 и 9537, реестр IANA и тип носителя. Подход к управлению опирается на эссе Heng Lu об уровнях реальности, минимальной начальной спецификации и приоритете работающего кода.

Ни одна конкретная реализация, организация, атака или авария не исследовалась. Статья не утверждает дефект RFC 9535 или чьё-либо неправильное применение.