Кратко
- 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 или чьё-либо неправильное применение.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров

