← Назад к инструменту JSON

Запрос JSONPath

Последнее обновление: 2 октября 2026 г.

Выполните выражение JSONPath по документу JSON и увидьте каждое совпадение с путём, где оно найдено. Запрос выполняется в браузере, документ никуда не отправляется.

Работает в браузере Без загрузки Пути в результатах Фильтры и срезы Открытый код (MIT)

Что умеет язык запросов

JSONPath для JSON — то же, что путь к папке для файловой системы: краткий способ сказать, какие значения нужны. $ — корень документа, .name ведёт к свойству, а […] выбирает внутри массива.

Фильтры проверяют наличие, а не истинность

Одиночный путь в фильтре спрашивает, есть ли свойство. Поэтому [?(@.inStock)] совпадает с элементом, у которого inStock равно false, — свойство существует. Так фильтр трактуется в RFC 9535. Когда важно значение, укажите это явно: [?(@.inStock == true)]. Это самый частый сюрприз в JSONPath, и он свойство языка, а не этого инструмента.

Что намеренно не делается

Функции фильтров вроде length(), match() и search() не реализованы, как и регулярные выражения, скриптовые выражения в скобках и расширения некоторых библиотек (ссылки на родителя и соседей). Запрос с ними отклоняется с сообщением, а не возвращает молча неверный результат — страница заявляет свои возможности, поэтому «совпадение» здесь означает именно это.

Частые вопросы

Какой синтаксис JSONPath поддерживается?

Корень $, доступ к дочерним узлам через .name или ['name'], подстановки .* и [*], рекурсивный спуск ..name и ..*, индексы массива включая отрицательные, срезы [start:end:step], объединения вида [0,1] и ['a','b'], а также фильтры [?(@.price < 10)] с операторами == != < <= > >= и комбинациями через && и ||.

Что не поддерживается?

Функции фильтров вроде length(), match() и search(), регулярные выражения, скриптовые выражения в скобках и расширения, которые добавляют некоторые библиотеки, например ссылки на родителя и соседей. Запрос с ними отклоняется, а не возвращает молча неверный результат.

Почему ?(@.inStock) совпадает с элементами, где inStock равно false?

Потому что одиночный путь в фильтре проверяет наличие, а не истинность: он спрашивает, есть ли свойство, а свойство, равное false, всё равно есть. Для проверки значения укажите явно: ?(@.inStock == true). Так фильтр трактуется в RFC 9535.

Результат показывает, откуда он взялся?

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

Мой документ загружается куда-нибудь?

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

Почему $..price вернул больше, чем я ожидал?

Рекурсивный спуск посещает каждый уровень документа, поэтому ..price находит свойство price где угодно — в массивах, вложенных объектах и посторонних ветвях. Чтобы сузить, привяжите запрос к большему пути, например $.store.book[*].price.

Хотите проверить документ по схеме? Для этого есть JSON Schema. Нашли ошибку? Свяжитесь с нами.