Тестер JSONPath и XPath

Проверка выражений JSONPath по JSON и XPath по XML: найденные значения, пути, номера строк, пространства имён.

Данные обрабатываются в браузере и никуда не отправляются

Язык запросов

Ввод

Данные
Перетащите файл сюда или выберите на диске
Выражение

Результат

Здесь появится результат

Введите данные слева - результат появится сразу

Как пользоваться

Выберите язык запросов, вставьте данные слева и напишите выражение под ними - результат появляется сразу. JSONPath ищет значения в JSON ($.store.book[*].title, фильтры вроде [?(@.price < 10)], рекурсивный спуск $..price), XPath - узлы в XML (//book[price < 10]/title, count(//book), атрибуты @id). В таблице для каждого совпадения показан путь, значение и место в данных: номер строки для JSON или тип узла для XML.

Для XML в пространстве имён используйте префиксы, объявленные в документе (@meta:state). Пространство имён по умолчанию (xmlns без префикса) в XPath 1.0 недоступно по умолчанию - здесь оно доступно под префиксом def: //def:item/def:name. Ещё можно написать //*[local-name()="item"].

Частые ошибки

Вот что чаще всего не срабатывает в выражениях:

XPath не находит элементы в документе с xmlns

Если у корня стоит xmlns="...", все элементы лежат в этом пространстве имён, и //item их не найдёт. Используйте префикс def: (//def:item) или local-name().

Регистр имён и кавычки

И JSONPath, и XPath различают регистр: Price и price - разные поля. В XPath строки пишутся в кавычках, внутри условия лучше брать другой тип кавычек, чем у самого выражения.

Разные диалекты JSONPath

Стандарт JSONPath (RFC 9535) появился недавно, а библиотеки реализуют его по-разному. Простые пути, [*], .., срезы и фильтры [?(@.x > 1)] работают везде, а функции и особые операторы - не обязательно.

Фильтр по числу и по строке

В фильтре price < 10 сравнивается число, а если значение лежит строкой ("8.95"), условие сработает не так, как ожидается. Смотрите тип значения в данных.

Индексы с нуля и с единицы

В JSONPath элементы массива нумеруются с нуля ([0] - первый), а в XPath с единицы (book[1] - первый). Это самая частая причина «сдвига на один».

Выражение не ищет в данных, которые не JSON/XML

Данные сначала разбираются как JSON или XML. Если там ошибка, выражение не выполняется, а ошибка показывается со строкой и столбцом.

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

Отправляются ли мои данные на сервер?

Нет - 100%. Сайт целиком статический, у него нет серверной части. JSONPath и XPath выполняются в вашем браузере.

Чем JSONPath отличается от XPath?

XPath придуман для XML и поддерживается браузерами и многими языками. JSONPath - его аналог для JSON: те же идеи (путь, фильтры, рекурсивный спуск), но другой синтаксис и нет единой реализации. Для XML используйте XPath, для JSON - JSONPath.

Какая версия XPath используется?

XPath 1.0 - тот, что встроен в браузеры. В нём нет функций XPath 2.0 и выше (например, matches(), upper-case(), if/then/else), зато есть count(), sum(), contains(), starts-with(), substring(), translate(), normalize-space().

Безопасно ли выполнять чужие выражения JSONPath?

Да: фильтры вычисляются безопасным встроенным интерпретатором, а не через eval, поэтому выражение не получает доступа к странице. Попытка вызвать функции вроде process.exit() даёт ошибку.

Как получить значение, а не узел, в XPath?

Добавьте text() или @атрибут: //title/text() вернёт текст, //book/@id - значения атрибутов. Функции string(), count(), sum() возвращают одно значение.

Можно ли выгрузить результат?

Да: под результатом есть кнопки «Копировать» и «Скачать». Для JSONPath результат - JSON-массив найденных значений.

Похожие инструменты

Курс «Проектирование API и интеграций»

Глубокое погружение в REST, gRPC, SOAP, проектирование баз данных и брокеры сообщений (Kafka, RabbitMQ). Делегирование рутины нейросетям (ИИ). Перестанете бояться технических собеседований и начнете говорить с разработчиками на одном языке. Курс собран так, чтобы пробить зарплатный потолок и вырасти в грейде - ученики тому подтверждение.

Перейти к курсу на Stepik