Что это такое
JSONPath — язык запросов для JSON, примерно то же, что XPath для XML. Запрос вроде $.store.book[*].title проходит по документу и выбирает нужные значения. Этот инструмент выполняет выражение JSONPath над вставленным JSON и выводит все совпадения в виде массива JSON: найденные значения, их нормализованные пути (например, $['store']['book'][0]['title']) или и то и другое.
Инструмент следует RFC 9535 — стандарту IETF, опубликованному в 2024 году, поэтому результаты совпадают с современными библиотеками для JavaScript, Java, Python, Go и других языков. Пользуйтесь им, чтобы проверить запрос до того, как вставить его в код, выяснить, почему фильтр ничего не находит, или вытащить несколько полей из большого ответа API.
Как пользоваться
- Вставьте JSON в поле JSON, загрузите файл
.jsonили нажмите Пример, чтобы открыть классический документ книжного магазина. - Введите запрос в поле Выражение JSONPath. Совпадения обновляются по мере ввода.
- Выберите, что Показать: значения, пути или пары путь/значение.
- Скопируйте или скачайте результат. При синтаксической ошибке указывается символ, на котором разбор остановился.
Шпаргалка по синтаксису
| Выражение | Значение |
|---|---|
$ | Корень документа |
.name или ['name'] | Член объекта |
[0], [-1] | Элемент массива (отрицательные считаются с конца) |
[1:3], [::2] | Срез: начало, конец (не включается) и шаг |
* | Все члены или элементы |
..name | name на любой глубине |
[?@.price < 10] | Дочерние элементы, для которых фильтр истинен; @ — текущий элемент |
В фильтрах можно объединять условия через &&, || и !, сравнивать с другими частями документа через $ и вызывать функции: length(@.tags) > 2, count(@.items[*]) == 0, match(@.code, '[A-Z]{3}') — вся строка должна соответствовать регулярному выражению, search(@.title, 'Ring') — совпадение в любом месте строки.
Пример
Для примера книжного магазина этот запрос выбирает названия книг дешевле 10:
$.store.book[?@.price < 10].title
и возвращает:
["Sayings of the Century", "Moby Dick"]
Замените его на $..book[?@.isbn].author, чтобы получить авторов книг с ISBN, или на $..price, чтобы собрать все цены магазина, включая цену велосипеда.
Частые вопросы
› Какой синтаксис JSONPath поддерживается?
Стандартный синтаксис RFC 9535: имена членов через точку и в квадратных скобках, подстановочный знак, индексы массивов (в том числе отрицательные), срезы, поиск на любой глубине через .., фильтры со сравнениями и && || !, а также функции length(), count(), match(), search() и value(). Старая запись ?(@.price < 10) тоже работает, потому что скобки лишь группируют.
› Почему запрос возвращает пустой массив?
Пустой массив означает, что запрос корректен, но ничего не найдено. Проверьте имена членов (регистр важен) и то, массив перед вами или объект. Широкий запрос вроде $..* с режимом «Пути» покажет, что есть в документе.
› Можно ли использовать скриптовые выражения вроде [(@.length-1)]?
Нет. Скриптовые выражения выполняют произвольный код и не входят в стандарт. Используйте отрицательный индекс: [-1] — последний элемент, [-2:] — два последних.
› Отправляется ли мой JSON на сервер?
Нет. Запрос разбирается и выполняется в вашем браузере собственным кодом страницы; ничего не загружается.