Тестер 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