Выполняйте запросы JSONPath по RFC 9535 к вставленному JSON и смотрите каждое совпадение с подсветкой
Работает в вашем браузере. Ничего из того, что вы вводите, никуда не отправляется.JSONPath извлекает значения из JSON коротким выражением. $.store.book[*].author возвращает всех авторов, $..price — все цены на любой глубине, а $..book[[email protected] < 10] — только книги дешевле 10. Этот тестер следует RFC 9535, стандарту 2024 года, и подсвечивает каждое совпадение в отформатированном JSON.
Эта страница переведена машинным способом с английского оригинала. Перевод ещё не проверен человеком, поэтому ориентируйтесь на английскую версию. Читать английский оригинал
Вставьте JSON в панель JSON или нажмите Показать пример.
Введите запрос в поле JSONPath или выберите его в списке Примеры.
Смотрите отмеченные совпадения на вкладке Подсветка или откройте Результаты, чтобы увидеть каждый путь и значение.
Нажмите Копировать значения, чтобы получить совпадения как массив JSON, или Копировать пути.
Этот тестер JSONPath выполняет запрос к вставленному JSON и показывает результат тремя способами: список совпавших значений, нормализованный путь к каждому совпадению и подсветку совпадений в отформатированном документе. Результат обновляется по мере ввода, так что выражение можно строить шаг за шагом и видеть, где оно ошибается.
Движок реализует RFC 9535 — стандарт JSONPath, опубликованный IETF в 2024 году. Он поддерживает корень $, доступ к дочерним элементам через точку и скобки, оператор рекурсивного спуска .., подстановочные знаки, индексы массивов, в том числе отрицательные, срезы вроде [1:5:2] и [::-1], а также выражения фильтров с ==, !=, <, <=, >, >=, &&, || и !. Есть все пять стандартных функций: length(), count(), value(), match() и search(), причём две последние принимают регулярные выражения в форме I-Regexp. Запросы, нарушающие правила типов стандарта, например сравнение запроса, который может вернуть несколько узлов, отклоняются с сообщением о причине.
Многие старые библиотеки, включая исходный JSONPath 2007 года и Jayway для Java, отличаются от стандарта в мелочах: некоторым нужны скобки вокруг фильтров, как в [?(@.price < 10)], что здесь по-прежнему работает; другие допускают скриптовые выражения или дополнительные функции, которых в RFC 9535 нет. Если запрос из документации библиотеки отклонён, сообщение обычно называет различие.
Некорректный JSON сообщается со строкой и столбцом первой ошибки. Числа читаются как числа JavaScript, поэтому целые больше 2^53 теряют точность, а повторяющийся ключ сохраняет последнее значение.
Чего он не делает: синтаксис JMESPath или jq, редактирование JSON, загрузка по URL. Всё работает в вашем браузере. Связанные инструменты: JSON Formatter, JSON Diff, JSON to TypeScript.
Используйте селектор фильтра: $.items[[email protected] == 'active'] оставляет элементы, у которых status равен active. Символ @ по очереди обозначает каждый элемент. Объединяйте условия через && и ||, сравнивайте числа через < и >, а [email protected] само по себе оставит элементы, у которых вообще есть поле email.
Одна точка берёт дочерний элемент текущего узла, поэтому $.store.book читает по одному уровню. Две точки ищут на любой глубине, поэтому $..price находит каждое поле price во всём документе, в том числе внутри массивов. Рекурсивный спуск удобен, но на больших ответах может совпасть с большим, чем задумано.
RFC 9535, опубликованному IETF в феврале 2024 года, — первому формальному стандарту JSONPath. Запросы, написанные для старых библиотек, в основном работают, включая фильтры в ?( ), но скриптовые выражения и функции отдельных библиотек не входят в стандарт и отклоняются с объяснением.
Используйте отрицательный индекс: $.items[-1] — последний элемент, а $.items[-2] — предпоследний. Срез с отрицательным началом тоже работает: $.items[-3:] возвращает три последних. Индексы за концом массива просто ничего не возвращают, а не вызывают ошибку.
Нормализованный путь — это единственное точное местоположение совпадения, записанное в фиксированной форме, определённой RFC 9535, например $['store']['book'][0]['title']. Каждый результат показывает свой нормализованный путь — это удобно, чтобы указать на значение в отчёте об ошибке или в проверке теста.
Да, с помощью match() и search(). match(@.code, 'A[0-9]+') требует, чтобы под шаблон подходила вся строка, а search(@.name, 'smith') находит его в любом месте. Шаблоны используют I-Regexp, переносимое подмножество регулярных выражений, поэтому сокращения вроде \d и опережающие проверки не принимаются.
Всё ещё не получается? Задайте вопрос об инструменте «Тестер JSONPath» и ответить может любой, кто знает. Учётная запись не нужна.