Как пользоваться
- Вставьте документ JSON в поле Документ JSON. Чтобы сначала попробовать инструмент, используйте пример.
- Введите Запрос JSONPath в поле под ним, начиная с $. Фильтры ставятся в скобки: [[email protected] < 10].
- Прочитайте счётчик Совпадения, затем таблицу Совпадения по порядку: каждая строка содержит путь совпадения и его значение.
- Если сообщение показывает позицию проблемы, посмотрите на этот символ запроса и исправьте скобки, кавычки или точки.
Как запрос выбирает узлы
Запрос — это список сегментов после $. Дочерний сегмент, например .store или [0], выбирает дочерние узлы каждого достигнутого узла, а сегмент потомков, например ..author, сначала обходит узел и всех его потомков. Узлы одного сегмента идут в порядке входных данных, а массив всегда читается по порядку (RFC 9535, разделы 2.5 и 2.5.2.2).
Селектор имени совпадает только с членом объекта с точно таким именем и только в объекте. Отрицательный индекс считает с конца массива, поэтому −1 — последний элемент. Срез вроде [1:5:2] берёт начало, конец и шаг, а шаг 0 не выбирает ничего (раздел 2.3.4.2).
Фильтры, функции и то, что инструмент отклоняет
Фильтр [?...] проверяет каждого потомка массива или объекта. Сравнения используют ==, !=, <, <=, > и >=; операторы &&, || и ! объединяют проверки, а скобки группируют их. Отсутствующий член — это Nothing, и два значения Nothing равны. Числа сравниваются с числами, текст — с текстом, а значение одного типа никогда не равно значению другого типа (раздел 2.3.5.2).
Функции length, count, value, match и search поддерживаются так, как их определяет RFC 9535. match и search принимают регулярное выражение в формате I-Regexp, описанном в RFC 9485; шаблон, который не является допустимым I-Regexp, ничего не находит. Литералы массивов и объектов не входят в грамматику, поэтому инструмент их отклоняет. Он отклоняет и результат функции, используемый сам по себе в фильтре, потому что RFC 9535 считает это неправильно типизированным.
Пример книжного магазина
С примером документа и запросом $.store.book[[email protected] < 10].title книги дешевле 10 — первая и третья. Их названия — два совпадения ниже, с нормализованным путём каждого.
| Нормализованный путь | Значение (JSON) |
|---|---|
| $['store']['book'][0]['title'] | "Sayings of the Century" |
| $['store']['book'][2]['title'] | "Moby Dick" |
Частые вопросы
Почему запрос ничего не возвращает, когда ключ есть?
Селектор имени совпадает только с членом объекта с точно таким же именем, и сравнение чувствительно к регистру. Он никогда не совпадает с элементом массива, поэтому для массива используйте индекс или подстановочный знак.
Почему 13 и «13» не равны в фильтре?
RFC 9535 считает значения разных типов неравными (раздел 2.3.5.3). Число и текст — разные значения, поэтому == ложно, а != истинно, даже когда символы выглядят одинаково.
Что выбирает отрицательный индекс?
Отрицательный индекс считает с конца массива: −1 — последний элемент, а −2 — предыдущий. Индекс за пределами массива ничего не выбирает и не является ошибкой (раздел 2.3.3.2).
Почему инструмент отклоняет length(@), когда он стоит один в фильтре?
length возвращает число, а фильтру нужна проверка, истинная или ложная. Сравните результат, как в [?length(@.title) > 15], — это правильно типизировано.
Инструмент отправляет мой JSON на сервер?
Нет. Документ читает ваш браузер с помощью JSON.parse, запрос выполняется там же, и ничего не сохраняется. Страница не делает сетевых запросов.
Источники
- RFC 9535, JSONPath: Query Expressions for JSON, разделы 1.5, 2.3, 2.4, 2.5 и 2.7 (на английском)
- RFC 9485, I-Regexp: An Interoperable Regular Expression Format, разделы 3 и 5.3 (на английском)
Цифры и текст в последний раз проверены вторник, 10 ноября 2026 г..