JSONPath — язык запросов к JSON-документам, аналог XPath для XML. Он позволяет извлечь нужные данные из вложенных структур без написания циклов на JavaScript или Python. Особенно полезен при работе с API-ответами и конфигурациями.
Что такое JSONPath
JSONPath был предложен Стефаном Гёссером в 2007 году как облегчённый XPath для JSON. В отличие от XPath, JSONPath работает с объектами, массивами и примитивами JavaScript-типов.
Пример: есть JSON-ответ API и нужно получить имена всех авторов из списка статей. JSONPath-запрос $.articles[*].author сделает это за одну строку.
Базовый синтаксис JSONPath
| Оператор | Значение | Пример |
|---|---|---|
$ | Корень документа | $ |
.key | Дочерний элемент | $.name |
..key | Рекурсивный поиск | $..name |
[*] | Все элементы массива | $.items[*] |
[n] | Элемент по индексу | $.items[0] |
[1,3] | Несколько индексов | $.items[1,3] |
[1:4] | Срез (slice) | $.items[1:4] |
[-1] | Последний элемент | $.items[-1] |
[?(@.price < 10)] | Фильтр | $.items[?(@.price < 10)] |
Практические примеры
Возьмём тестовый JSON:
{
"store": {
"books": [
{ "title": "CSS Secrets", "author": "Lea Verou", "price": 29.99 },
{ "title": "You Don't Know JS", "author": "Kyle Simpson", "price": 0 },
{ "title": "Clean Code", "author": "Robert Martin", "price": 34.99 }
],
"name": "Bookstore"
}
}
Получить все книги:
$.store.books[*]
Получить только заголовки:
$.store.books[*].title
Найти книги дешевле 30:
$.store.books[?(@.price < 30)]
Рекурсивный поиск всех полей author:
$..author
Последняя книга в списке:
$.store.books[-1]
Срез — первые две книги:
$.store.books[0:2]
Фильтры и условия
Фильтры — самая мощная часть JSONPath. Синтаксис: [?(<выражение>)], где @ означает текущий элемент.
$.books[?(@.price > 0 && @.author == "Kyle Simpson")]
Поддерживаемые операторы: ==, !=, <, <=, >, >=, =~ (регулярные выражения в некоторых реализациях).
Где используется JSONPath
Postman — JSONPath-запросы в тестах для извлечения значений из ответа API.
Kubernetes — JSONPath в kubectl:
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
AWS — условия в IAM-политиках, Step Functions:
"InputPath": "$.order.items[?(@.quantity > 0)]"
Grafana, Prometheus — извлечение метрик из JSON-ответов.
JSONPath vs JMESPath vs jq
| Инструмент | Синтаксис | Применение |
|---|---|---|
| JSONPath | $.items[*].name | Postman, Kubernetes, Spring |
| JMESPath | items[*].name | AWS CLI, Ansible |
| jq | .items[] | .name | Терминал, скрипты |
Для форматирования и валидации JSON-документов перед применением запросов используйте JSON Formatter. Для проверки схемы данных — JSON Schema Validator.
Инструмент на reChecker
JSONPath тестер на reChecker позволяет вставить JSON и JSONPath-выражение, чтобы мгновенно увидеть результат выборки. Удобно для отладки запросов к API без написания кода.