Skip to content

Бесплатный тестер JSONPath онлайн

Проверяйте выражения JSONPath на любом JSON мгновенно. Движок RFC 9535 плюс классический режим Goessner, виды «Значения / Пути / Оба», нормализованные пути, без eval. 100% приватно, работает в браузере.

Без отслеживания Работает в браузере Бесплатно
Всё вычисление выполняется локально в вашем браузере. Ваш JSON и выражение никогда не покидают это устройство. Без eval, без загрузки.
Движок
 
Шпаргалка по JSONPath
$Корневой элемент
@Текущий элемент (в фильтрах)
.nameДочерний член
..nameРекурсивный спуск
[*]Все элементы / члены
[0]Индекс массива
[0:2]Срез массива [start:end:step]
[a,b]Объединение имён / индексов
[?(@.k>1)]Выражение-фильтр
length()Функция RFC 9535: length / count / match / search / value
Проверено на точность соответствия грамматике RFC 9535, корректность нормализованных путей, семантический паритет двух движков на распространённых путях и задокументированные расхождения в крайних случаях, безопасность без eval (закрытие CVE-2024-21534 и CVE-2025-1302) и доступность (роли ARIA, тумблер движка radiogroup, объявление результатов для программ чтения с экрана, обработка LTR-JSON при RTL-вёрстке). — Команда инструментов работы с данными Go Tools · Jun 13, 2026

Что такое тестер JSONPath?

Тестер JSONPath — это инструмент, который позволяет написать выражение JSONPath, вставить JSON-документ и точно увидеть, какие узлы выбирает выражение — как совпавшие значения, так и их точные расположения — не написав ни кода, ни скрипта. Для разработчиков он сокращает цикл с минут до миллисекунд: подправьте путь, посмотрите, как меняется результат, и отправляйте запрос с уверенностью.

JSONPath — это язык запросов для JSON, аналог JSON для XPath применительно к XML. Выражение строится из небольшого алфавита селекторов. $ — корень документа. Точка или скобка шагает в потомка: $.store или $['store']. Двойная точка .. — это рекурсивный спуск, он ищет на каждом уровне дерева. Подстановка * выбирает все элементы или члены. Скобки несут индексы массива ([0]), срезы ([start:end:step]), объединения ([a,b]) и выражения-фильтры ([?(@.price < 10)], где @ — проверяемый элемент). С этими частями вы можете вытащить одно поле из глубоко вложенного ответа API, проверить значения в тестах, управлять преобразованиями данных в системах вроде Kubernetes, AWS Step Functions и Azure Logic Apps или извлекать структурированные данные из нерегулярного JSON — всё без императивного кода обхода. JSONPath также печально известен непоследовательностью между реализациями, и это именно та проблема, которую хороший тестер выявляет до того, как она дойдёт до продакшена.

Этот тестер поставляется с двумя движками. По умолчанию — движок RFC 9535: RFC 9535 — это формальная спецификация JSONPath от IETF, выпущенная в феврале 2024 года, впервые точно стандартизировавшая язык после пятнадцати лет расходящихся реализаций. Она определяет точную грамматику, концепцию нормализованных путей для результатов и пять стандартных функций — length(), count(), match(), search(), value(). Наш движок RFC 9535 — это реализация без зависимостей, которая не использует eval, поэтому разбирает и интерпретирует выражения собственной грамматикой, а не компилирует их в JavaScript. Второй движок — Classic (Goessner), де-факто диалект 2007 года, который реализуют большинство старых онлайн-инструментов и библиотек; переключитесь на него, чтобы воспроизвести результаты из инструмента вроде jsonpath.com или запустить выражение, скопированное из устаревшего кода. Эти два диалекта согласны на распространённых путях, но расходятся в крайних случаях — пробелы и кавычки в фильтрах, порядок объединений, как сравниваются отсутствующие члены и какие функции существуют — поэтому возможность переключаться между ними в одном месте — самый быстрый способ диагностировать, почему выражение ведёт себя иначе, чем вы ожидали.

Что тестер выявляет помимо сырых значений: результат запроса JSONPath — это список узлов, и этот инструмент может показать его тремя способами. Вид «Значения» отображает совпавшие узлы как JSON-массив, ровно то, что вы потребляли бы в коде. Вид «Пути» отображает нормализованный путь каждого совпадения — каноническое расположение в скобках и кавычках вроде $['store']['book'][0]['title'], которое однозначно определяет, где в документе находится значение, как бы ни было написано выражение. Два выражения, выбирающих один и тот же узел, дают один и тот же нормализованный путь, что делает вид «Пути» незаменимым при отладке. Вид «Оба» показывает значения и пути рядом. Строка статистики сообщает, сколько узлов совпало.

Безопасность здесь — первостепенная забота. Многие онлайн-движки JSONPath работают на сервере или встраивают библиотеку, которая вычисляет предикаты фильтров через JavaScript eval — конструкция, породившая уязвимости удалённого выполнения кода, отслеживаемые как CVE-2024-21534 и CVE-2025-1302 в широко используемых пакетах JSONPath. Этот инструмент не использует eval вообще. У движка RFC 9535 нет пути eval, а классический движок построен на исправленном, зафиксированном релизе jsonpath-plus с явно отключённым eval. Это закрывает класс ошибок RCE и позволяет инструменту работать под строгой Content-Security-Policy, запрещающей unsafe-eval. Каждое вычисление локально: ваш JSON и ваше выражение никогда не покидают страницу, никогда не журналируются и никогда не сохраняются на диск — в localStorage сохраняются только настройки движка и вида. Это делает инструмент безопасным для проприетарных полезных нагрузок API, очищенных логов, внутренних конфигов и любых данных со схемой, которые вы не вставили бы в серверный сервис.

Если работа с JSON — ваша задача, сочетайте это с другими инструментами JSON на сайте: форматируйте и красиво отображайте ввод с помощью JSON Formatter, сравнивайте два документа с помощью JSON Diff, проверяйте полезную нагрузку по схеме с помощью JSON Schema Validator или превращайте образец ответа в типизированные интерфейсы с помощью JSON to TypeScript.

// The expression you build in this tester maps straight onto the
// RFC 9535 reference library used under the hood.
import { query, paths } from 'jsonpath-rfc9535';

const document = {
  store: {
    book: [
      { title: 'Sayings of the Century', author: 'Nigel Rees', price: 8.95 },
      { title: 'Sword of Honour', author: 'Evelyn Waugh', price: 12.99 },
      { title: 'Moby Dick', author: 'Herman Melville', price: 8.99 },
      { title: 'The Lord of the Rings', author: 'J. R. R. Tolkien', price: 22.99 }
    ]
  }
};

// Values: query(document, path) returns the matched values directly.
const titles = query(document, '$.store.book[*].title');
// → ['Sayings of the Century', 'Sword of Honour', 'Moby Dick', 'The Lord of the Rings']

// Filter: books cheaper than 10.
const cheap = query(document, '$.store.book[?(@.price < 10)].title');
// → ['Sayings of the Century', 'Moby Dick']

// Normalized paths: paths(document, path) returns where each match lives.
const authorPaths = paths(document, '$..author');
// → ["$['store']['book'][0]['author']", "$['store']['book'][1]['author']", ...]

// RFC 9535 functions like length() are used INSIDE filters, not as a segment.
const longTitles = query(document, '$.store.book[?length(@.title) > 15]');
// → the two books whose title is longer than 15 characters

Ключевые возможности

Стандартный движок RFC 9535 (без eval)

Движок по умолчанию реализует RFC 9535, формальную спецификацию JSONPath от IETF 2024 года — точную грамматику, нормализованные пути и пять стандартных функций. Он без зависимостей и не использует eval, поэтому разбирает и интерпретирует выражения собственной грамматикой, а не компилирует их в JavaScript. Он работает под строгой Content-Security-Policy.

Режим совместимости Classic (Goessner)

Один тумблер переключает на совместимый с Goessner движок (построенный на jsonpath-plus, сконструированный с отключённым eval), чтобы выражения из старых инструментов вроде jsonpath.com вели себя так, как вы там видели. Переключайтесь между RFC 9535 и Classic, чтобы сравнивать результаты и выяснять, почему путь совпадает по-разному в разных диалектах.

Три вида результата: Значения, Пути, Оба

«Значения» отображает совпавшие узлы как JSON-массив, ровно то, что вы потребляете в коде. «Пути» отображает нормализованный путь каждого совпадения вида $['store']['book'][0]['title']. «Оба» показывает их рядом, чтобы вы могли сопоставить каждое значение его точному расположению. Активный вид сохраняется между сеансами.

Нормализованные пути для каждого совпадения

Каждый результат несёт свой канонический нормализованный путь в скобках и кавычках — способ RFC 9535 однозначно определить расположение узла независимо от того, как было написано выражение. Два выражения, попадающие в один узел, дают один и тот же нормализованный путь, что делает отладку неоднозначных запросов простой.

Полная поддержка селекторов

Корень $, текущий элемент @, потомок .name, рекурсивный спуск ..name, подстановка [*], индекс массива [0], срез [start:end:step], объединение [a,b] и выражения-фильтры [?()] с операторами сравнения и логики. Встроенная шпаргалка документирует каждый селектор, чтобы вам не приходилось покидать страницу ради справки.

Функциональные расширения RFC 9535

Вызывайте length(), count(), match(), search() и value() внутри выражений — считайте элементы массива, проверяйте строку по шаблону I-Regexp или фильтруйте по размеру вложенного списка. Эти стандартные функции доступны в движке по умолчанию; инструмент подскажет переключить движок, если вы вызвали их в классическом режиме.

Форматирование, загрузка и примеры

«Форматировать JSON» красиво отображает ваш ввод, чтобы структура читалась перед запросом. «Загрузить» читает файл .json или .txt целиком в браузере — он никуда не отправляется. Список «Примеры» загружает заведомо рабочие стартовые выражения на образце данных, чтобы вы увидели работу движка перед адаптацией пути.

Обмен постоянными ссылками (без загрузки)

«Копировать ссылку» кодирует JSON, выражение, движок и вид в хеш URL. Браузеры никогда не передают фрагменты URL в запросах, поэтому переданная ссылка воспроизводит ваше полное состояние на машине получателя, не затрагивая серверы go-tools.org. Самодостаточно и удобно для аудита при совместной отладке.

100% приватно, только в браузере

Ваш JSON и ваше выражение никогда не покидают ваше устройство. Никаких сетевых запросов, никакого журналирования, никакой аналитики того, что вы вводите — проверьте в DevTools → Network. В localStorage сохраняются только настройки движка и вида. Безопасно для проприетарных полезных нагрузок, очищенных логов и любых данных, которые вы не вставили бы в jsonpath.com.

Разобранные примеры

Выбрать все названия книг из документа книжного магазина

$.store.book[*].title
["Sayings of the Century", "Sword of Honour", "Moby Dick", "The Lord of the Rings"]

Вставьте классический JSON книжного магазина Goessner, введите выражение, и вид «Значения» вернёт JSON-массив всех четырёх названий. Переключитесь на «Пути», чтобы увидеть каждый результат как нормализованный путь вида $['store']['book'][0]['title']. Подстановка [*] перебирает каждый элемент массива book; .title проецирует один член из каждого.

Отфильтровать книги дешевле 10 с помощью выражения-фильтра

$.store.book[?(@.price < 10)].title
["Sayings of the Century", "Moby Dick"]

Селектор-фильтр [?()] оставляет только те элементы массива, для которых предикат истинен; @ — это текущий элемент. На данных книжного магазина (цены 8.95, 12.99, 8.99, 22.99) подходят две книги. Оба движка принимают такую форму, но учтите, что классический режим (Goessner) пишет тот же фильтр как [?(@.price<10)] — переключите движок, если вы скопировали выражение из более старого инструмента.

Обойти всё дерево с помощью рекурсивного спуска

$..author
["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien"]

Оператор .. спускается на каждый уровень документа и собирает каждый член author, где бы он ни появился, независимо от глубины вложенности. Рекурсивный спуск — самый быстрый способ извлечь одно поле из глубоко вложенной или нерегулярной структуры, не прописывая полный путь.

Срез массива с [start:end:step]

$.store.book[0:2].title
["Sayings of the Century", "Sword of Honour"]

Срезы массива следуют тому же полуоткрытому соглашению [start:end], что и в Python и JavaScript: индекс 0 вплоть до (но не включая) индекс 2 возвращает первые две книги. Добавьте третье поле для шага — $.store.book[::2] берёт каждый второй элемент. Верхняя граница не включается — частая ошибка на единицу, которую вид «Пути» делает очевидной.

Отфильтровать по длине названия функцией length() из RFC 9535

$.store.book[?length(@.title) > 15]
[{"title": "Sayings of the Century", "author": "Nigel Rees", "price": 8.95}, {"title": "The Lord of the Rings", "author": "J. R. R. Tolkien", "price": 22.99}]

length() — одна из пяти стандартных функций RFC 9535, и она допустима только внутри выражения-фильтра [?...], но никогда как самостоятельный сегмент пути вида $.store.book.length(), который грамматика RFC 9535 отвергает (такая форма сегмента — расширение jsonpath-plus, а не стандартный JSONPath). Здесь фильтр оставляет каждую книгу, у которой название длиннее 15 символов; на данных книжного магазина выбираются названия длиннее 15 символов (например, «Sayings of the Century» и «The Lord of the Rings»), а более короткие, такие как «Moby Dick» и «Sword of Honour», исключаются. count(), match(), search() и value() аналогично используются внутри фильтров. Эти функции — возможность RFC 9535: переключитесь на стандартный движок (по умолчанию), чтобы их использовать; классический режим (Goessner) их не реализует.

Выбрать объединение двух именованных членов

$.store.book[0]['title','author']
["Sayings of the Century", "Nigel Rees"]

Селектор-объединение [a,b] собирает несколько потомков в одном выражении. Здесь он извлекает и title, и author первой книги. Объединения также работают с индексами массива — [0,2] берёт первый и третий элементы. Вид «Оба» сопоставляет каждое значение его нормализованному пути, так что видно точно, какой член дал какой результат.

Как пользоваться тестером JSONPath

  1. 1

    Вставьте или загрузите свой JSON

    Перетащите JSON в поле ввода, вставьте его или нажмите «Загрузить», чтобы открыть файл .json / .txt с диска. «Форматировать JSON» переформатирует документ. Некорректный JSON помечается на месте сообщением парсера ещё до запроса.

  2. 2

    Выберите движок

    RFC 9535 (стандарт IETF 2024 года, без eval) — по умолчанию. Переключитесь на Classic (Goessner), когда запускаете выражение, скопированное из более старого инструмента вроде jsonpath.com, чтобы результаты совпали с тем, что вы там видели.

  3. 3

    Введите выражение JSONPath

    Ведущий $ показан за вас. Начните с детского пути вроде .store.book[*].title, индекса вроде [0], рекурсивного спуска вроде ..author или фильтра вроде [?(@.price < 10)]. Результаты обновляются вживую по мере ввода.

  4. 4

    Переключите вид результата

    «Значения» показывает JSON-массив совпавших значений. «Пути» показывает нормализованный путь каждого совпадения вида $['store']['book'][0]['title']. «Оба» показывает их рядом, чтобы вы могли сопоставить каждое значение его точному расположению в документе.

  5. 5

    Скопируйте результат или поделитесь постоянной ссылкой

    «Копировать результат» помещает вывод в буфер обмена. «Копировать ссылку» кодирует JSON, выражение, движок и вид в хеш URL (без загрузки), чтобы коллега мог воспроизвести точно тот же запрос локально на своей машине.

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

Забыли ведущий корень $

Каждое выражение JSONPath начинается с корня, записываемого как $. Пропуск его (или запись пути так, будто $ подразумевается) заставляет большинство движков отвергнуть выражение. Тестер показывает $ за вас, поэтому начните ввод со следующего селектора — точки, скобки или рекурсивного спуска.

✗ Неверно
store.book[*].title  →  invalid (no root)
✓ Верно
$.store.book[*].title  →  selects every title

Ошибка на единицу в срезе — ожидали, что конечный индекс включён

Срезы полуоткрыты: [start:end] идёт вплоть до (но не включая) end. [0:2] возвращает два элемента (индексы 0 и 1), а не три. Чтобы включить последний элемент по индексу, используйте [start:] или сдвиньте верхнюю границу на единицу дальше.

✗ Неверно
$.store.book[0:2]  →  first TWO books, not three
✓ Верно
$.store.book[0:3]  →  first three books (indices 0,1,2)

Использовали классическое выражение в движке RFC 9535 (или наоборот)

Выражение, скопированное с jsonpath.com или из jsonpath-plus, может разбираться или совпадать иначе под RFC 9535 из-за отличий фильтров, объединений и функций. Если результаты выглядят неверно, переключите тумблер движка под тот диалект, для которого выражение было написано.

✗ Неверно
Classic filter run under RFC 9535  →  parse error or unexpected nodes
✓ Верно
Switch engine to Classic (Goessner)  →  reproduces the original result

Вызвали функцию RFC 9535 как самостоятельный сегмент

length(), count(), match(), search() и value() — функциональные расширения RFC 9535, допустимые только внутри фильтра [?...]. Самостоятельный вызов в сегменте вида $.store.book.length() отвергается грамматикой RFC 9535 (это расширение jsonpath-plus, не стандарт). Вызывайте функцию внутри фильтра и используйте движок RFC 9535 по умолчанию — классический движок (Goessner) эти функции не реализует.

✗ Неверно
$.store.book.length()  →  parse error (not a valid RFC 9535 segment)
✓ Верно
$.store.book[?length(@.title) > 15]  →  books with a title over 15 chars

Забыли @ внутри выражения-фильтра

Внутри фильтра [?()] текущий элемент — это @, а не $. Запись $.price отсылает обратно к корню документа, а не к проверяемому элементу, поэтому фильтр не выбирает ничего или выбирает всё. Используйте @, чтобы адресовать члены фильтруемого элемента.

✗ Неверно
$.store.book[?($.price < 10)]  →  wrong scope
✓ Верно
$.store.book[?(@.price < 10)]  →  books under 10

Заключили имя члена в неверный синтаксис кавычек

Скобочная нотация требует кавычек вокруг строковых ключей: $['store'] или $.store оба работают, но $[store] (без кавычек в скобках) — ошибка индекса/идентификатора. Используйте кавычки внутри скобок для любого ключа с пробелами, точками или специальными символами: $['first name'].

✗ Неверно
$[store][book]  →  invalid bracket selectors
✓ Верно
$['store']['book']  →  same as $.store.book

Ожидали, что рекурсивный спуск остановится на первом уровне

$..author не останавливается наверху — он собирает каждый член author на каждой глубине. Если вам нужны только прямые потомки, пропишите путь. Рекурсивный спуск по большому документу может вернуть гораздо больше узлов, чем задумано.

✗ Неверно
$..price  →  every price anywhere in the tree
✓ Верно
$.store.book[*].price  →  only book prices

Кто пользуется этим инструментом

Извлечение полей из ответа API
Вытаскивайте идентификаторы запросов, вложенные атрибуты ресурсов или список имён из JSON-полезной нагрузки без написания кода обхода. Постройте путь здесь на образце ответа, подтвердите в виде «Значения», что он возвращает ровно нужные узлы, затем вставьте проверенное выражение в своё приложение или тест.
Написание проверок для интеграционных тестов
Многие тестовые фреймворки и инструменты контрактного тестирования (REST Assured, Karate, Postman) используют JSONPath для проверок тел ответов. Набросайте путь проверки здесь, убедитесь, что он выбирает нужный узел на реальном ответе, и скопируйте его в свой тест — поймав неверный путь до того, как набор станет красным.
Настройка преобразований данных в конвейерах
Kubernetes, AWS Step Functions, Azure Logic Apps и многие ETL-инструменты принимают JSONPath для адресации полей в полезных нагрузках событий. Прототипируйте точный путь на репрезентативном событии здесь, подтвердите, что он разрешается, и поместите его в конфигурацию конвейера с уверенностью, что он указывает туда, куда вы задумали.
Приватное воспроизведение результата jsonpath.com
Есть выражение из серверного движка, но нельзя вставлять свои данные на сторонний сайт? Переключитесь в режим Classic (Goessner), загрузите свой JSON и воспроизведите тот же результат локально — ни одна полезная нагрузка не покидает браузер, так что проприетарные данные остаются на вашей машине.
Миграция устаревших выражений на RFC 9535
Переходите на систему, заявляющую о соответствии RFC 9535? Запустите устаревшее выражение в режиме Classic, затем переключитесь на движок RFC 9535, чтобы увидеть, разбирается ли оно по-прежнему и совпадает ли с теми же узлами. Сравнение двух движков точно указывает на отличия фильтров, объединений и функций, на которые вы иначе наткнулись бы в продакшене.
Отладка, почему путь возвращает не те узлы
Путь, который выбирает слишком много или слишком мало, трудно понять только по значениям. Переключитесь на вид «Пути», чтобы увидеть нормализованное расположение каждого совпадения — точный индекс массива, точную цепочку членов — и ошибка на единицу в срезе или случайный рекурсивный спуск сразу становятся очевидными.
Обучение или ревью JSONPath
Откройте рабочее выражение на образце данных и пройдите по нему селектор за селектором, переключаясь между «Значения» и «Пути», чтобы обучающийся видел и что выбрано, и где оно находится. Шпаргалка и разобранные примеры дают структурированный справочник для код-ревью или онбординга.

Заметки о движке и алгоритме

Движок RFC 9535 (jsonpath-rfc9535, без зависимостей)
Движок по умолчанию реализует грамматику IETF RFC 9535 напрямую: он токенизирует и разбирает выражение в абстрактное синтаксическое дерево и интерпретирует его против документа. На всём пути нет ни eval, ни конструктора Function, поэтому он невосприимчив к классу ошибок eval-инъекций и работает под строгой Content-Security-Policy.
Классический движок (jsonpath-plus, eval отключён)
Классический движок (Goessner) — это jsonpath-plus, зафиксированный на исправленном релизе (>= 10.4.0) и сконструированный с опцией eval, явно установленной в false. Это сохраняет совместимость с диалектом Goessner, закрывая при этом векторы удалённого выполнения кода, отслеживаемые как CVE-2024-21534 и CVE-2025-1302, которые затрагивали путь фильтрации библиотеки на основе eval по умолчанию.
Генерация нормализованного пути
Каждое совпадение сообщается с его нормализованным путём RFC 9535 — канонической формой в скобочной нотации с одинарными кавычками ($['store']['book'][0]['title']) и индексами массива как голыми целыми числами. Нормализованные пути стабильны и уникальны для узла, так что эквивалентные выражения дают идентичные пути, на что виды «Пути» и «Оба» опираются для однозначной идентификации результата.
Ленивая загрузка чанков движка
Оба движка загружаются как отдельные чанки JavaScript только при первом выборе, поэтому начальная страница остаётся лёгкой, а движок, который вы не используете, никогда не скачивается. Переключение движков немедленно пересчитывает текущее выражение против текущего документа без перезагрузки страницы.
Локальное чтение файлов и форматирование JSON
Кнопка «Загрузить» использует браузерный API FileReader, чтобы прочитать файл .json или .txt во ввод полностью на стороне клиента — файл никогда не передаётся. «Форматировать JSON» разбирает и пересериализует ввод с отступом в два пробела, выявляя ошибки разбора на месте, так что некорректный JSON ловится до вычисления.
Постоянные ссылки через хеш URL (никогда не передаются)
Состояние для обмена кодируется во фрагменте location.hash, неся JSON, выражение, активный движок и вид результата. Браузеры никогда не включают фрагмент в HTTP-запросы, поэтому серверы go-tools.org получают ноль данных при открытии постоянной ссылки; восстановление происходит полностью на устройстве получателя.

Лучшие практики JSONPath

Выбирайте движок под вашу цель
Если ваша целевая система заявляет о соответствии RFC 9535, пишите и проверяйте против движка RFC 9535. Если вы воспроизводите или сопровождаете выражение из более старого инструмента или библиотеки, используйте Classic (Goessner). Проверка против неверного диалекта — самая частая причина, по которой путь, работавший в тестере, отказывает в продакшене.
Проверяйте видом «Пути», а не только «Значения»
Вид «Значения» говорит, что совпало; вид «Пути» говорит, где. Когда запрос возвращает на вид правильные значения, он всё ещё может выбирать их из неверного расположения — случайный рекурсивный спуск или слишком широкая подстановка. Проверьте нормализованные пути, чтобы убедиться, что выражение попадает ровно в те узлы, которые вы задумали.
Помните о невключаемой верхней границе среза
[0:2] выбирает индексы 0 и 1, а не от 0 до 2 — верхняя граница не включается, как в Python и JavaScript. Ошибки на единицу в срезах — самый частый баг JSONPath. Используйте вид «Пути», чтобы прочитать точный индекс каждого выбранного элемента и подтвердить границу перед отправкой.
Предпочитайте явный путь рекурсивному спуску, когда можете
$..price удобен, но совпадает с каждой ценой где угодно в документе, включая те, что вы не задумывали. Когда вы знаете структуру, пропишите путь ($.store.book[*].price), чтобы запрос оставался точным и предсказуемым по мере роста данных. Оставьте .. для действительно нерегулярных или неизвестных форм.
Сохраняйте единообразие пробелов и кавычек в фильтрах
RFC 9535 в точности следует своей грамматике для выражений-фильтров, тогда как классический диалект свободнее. Пишите фильтры чисто — заключайте строковые литералы в одинарные кавычки ('fiction'), оставляйте пробелы вокруг операторов и не полагайтесь на снисходительный разбор — чтобы одно и то же выражение вычислялось одинаково независимо от того, какой движок или библиотека в итоге его запустят.

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

Отправляются ли мой JSON или выражение JSONPath на ваш сервер?
Нет. Каждое вычисление выполняется на JavaScript внутри вашего браузера. Ваш JSON-документ и ваше выражение JSONPath не загружаются, не журналируются, не сохраняются на диск и не отправляются никаким третьим сторонам. В localStorage сохраняются только настройки интерфейса — активный движок (RFC 9535 или Classic) и вид результата (Значения / Пути / Оба), чтобы страница их запомнила к следующему визиту; сам JSON и выражение никогда не сохраняются. Вы можете проверить это, открыв DevTools → Network: ввод в любом из полей не вызывает ни одного запроса. Это делает инструмент безопасным для проприетарных полезных нагрузок API, очищенных образцов логов, внутренних конфигов и всего прочего, что вы не вставили бы в серверный движок вроде jsonpath.com.
Что такое JSONPath и для чего он используется?
JSONPath — это язык запросов для JSON, так же как XPath является языком запросов для XML. Вы пишете выражение пути — например $.store.book[*].author — и движок возвращает каждое значение в документе, которое этот путь выбирает. Он используется, чтобы извлекать конкретные поля из ответов API, проверять значения в интеграционных тестах, настраивать преобразования данных в инструментах вроде Jenkins, Kubernetes, AWS Step Functions и Azure Logic Apps, а также извлекать данные из больших или нерегулярных JSON без написания императивного кода обхода. Выражение строится из набора селекторов: $ (корень), . или [] (доступ к потомку), .. (рекурсивный спуск), * (подстановка), [start:end:step] (срез массива), [a,b] (объединение) и [?()] (фильтр). Этот тестер вычисляет выражение вживую и показывает как совпавшие значения, так и их нормализованные пути.
В чём разница между RFC 9535 и классическим синтаксисом Goessner?
Классический JSONPath — это де-факто синтаксис, опубликованный Стефаном Гёсснером в 2007 году. Он получил широкое распространение, но так и не был формально стандартизирован, поэтому тонкие особенности поведения — как записываются фильтры, как работают объединения и корневая функция, как сравниваются отсутствующие значения — расходились между библиотеками. RFC 9535, опубликованный IETF в феврале 2024 года, — это первая формальная спецификация JSONPath. Он закрепляет точную грамматику, определяет нормализованные пути для результатов и добавляет стандартные функции (length, count, match, search, value). Оба диалекта близки, но не идентичны: RFC 9535 строже относится к пробелам и кавычкам в фильтрах, определяет семантику сравнения отсутствующих членов и отвергает некоторые вольные конструкции, которые классический диалект допускал. Этот инструмент по умолчанию использует движок RFC 9535 (реализация без зависимостей и без eval) и позволяет переключиться на классический движок (Goessner) для обратной совместимости.
Почему одно и то же выражение возвращает разные результаты в двух движках и как использовать выражение, скопированное с jsonpath.com?
Потому что у RFC 9535 и классического диалекта Goessner действительно разные правила в крайних случаях — пробелы и кавычки в фильтрах, порядок объединений, как сравниваются отсутствующие члены и какие функции существуют. Выражение, написанное для одного движка, может совпадать иначе (или вовсе не разобраться) в другом. Если вы скопировали выражение из более старого инструмента, такого как jsonpath.com, jsonpath-plus или сервис на базе Jayway, переключите тумблер движка вверху на Classic (Goessner): этот режим запускает совместимый с Goessner движок (построенный на jsonpath-plus, сконструированный с отключённым eval) и воспроизведёт поведение, которое вы видели в исходном инструменте. Если вы пишете новое выражение или нацелены на систему, заявляющую о соответствии RFC 9535, оставьте движок RFC 9535 по умолчанию. Шпаргалка и встроенные примеры написаны так, чтобы вычисляться одинаково в обоих движках, давая вам заведомо рабочую отправную точку.
Как работают выражения-фильтры [?()]?
Селектор-фильтр оставляет только те элементы массива (или члены объекта), для которых предикат истинен. Внутри фильтра @ ссылается на текущий проверяемый элемент. $.store.book[?(@.price < 10)] возвращает каждую книгу, у которой член price меньше 10. Можно сравнивать с литералами (@.category == 'fiction'), комбинировать условия через && и ||, проверять наличие члена (@.isbn выбирает элементы, у которых isbn вообще есть), а в RFC 9535 — использовать функциональные расширения внутри предиката (?(length(@.tags) > 2)). Операторы сравнения: ==, !=, <, <=, >, >=. RFC 9535 точен в отношении типов: сравнение отсутствующего члена со значением определено корректно и не вызывает ошибку. Классический диалект свободнее относится к пробелам, поэтому [?(@.price<10)] и [?(@.price < 10)] там оба принимаются; RFC 9535 следует своей грамматике в точности.
Что делает рекурсивный спуск (..)?
Оператор .. ищет на каждом уровне документа, а не только среди непосредственных потомков. $..author собирает каждый член author, где бы он ни встретился — внутри объекта верхнего уровня, внутри массивов, внутри вложенных объектов, на любой глубине. Это самый быстрый способ извлечь поле из глубоко вложенной или нерегулярной структуры, когда вы не хотите (или не можете) прописать полный путь. После .. можно поставить любой селектор: $..book[*] находит каждый элемент каждого массива book где угодно в дереве, $..* перечисляет каждое значение в документе, а $..['price'] собирает все члены price. Рекурсивный спуск может совпасть со многим — переключитесь на вид «Пути», чтобы точно увидеть, откуда взялся каждый результат, по его нормализованному пути.
Что такое функции RFC 9535 length(), count(), match(), search() и value()?
RFC 9535 определяет пять стандартных функциональных расширений, и ключевое правило в том, что они вызываются только внутри выражения-фильтра [?...] — никогда как самостоятельный сегмент пути. Запись $.store.book.length() недопустима в RFC 9535, и стандартная грамматика её отвергает (форма вызова в сегменте — расширение jsonpath-plus, не часть спецификации). length() возвращает длину строки, массива или объекта, поэтому её используют для фильтрации по размеру: $.store.book[?length(@.title) > 15] оставляет книги, у которых название длиннее 15 символов. count() возвращает число узлов в списке узлов, опять же внутри фильтра: $.store.book[?(count(@.authors) > 1)]. match() проверяет, соответствует ли строка регулярному выражению по всему значению, а search() проверяет совпадение в любом месте строки — обе принимают шаблон I-Regexp. value() преобразует список из одного узла в его значение, чтобы его можно было использовать в сравнении. Эти функции — часть стандарта RFC 9535, поэтому они доступны в движке по умолчанию; классический движок (Goessner) их не реализует. Если выражение с функцией не работает, убедитесь, что вы вызываете её внутри фильтра и что тумблер движка установлен на RFC 9535.
Как работают срезы массива [start:end:step]?
Срезы используют то же полуоткрытое соглашение, что Python и JavaScript: [start:end] выбирает с индекса start вплоть до (но не включая) индекс end, поэтому [0:2] возвращает первые два элемента (индексы 0 и 1). Опустите границу, чтобы дойти до края — [2:] от индекса 2 и далее, [:3] для первых трёх. Отрицательный индекс отсчитывается от конца: [-1:] выбирает последний элемент. Необязательное третье поле — шаг: [::2] берёт каждый второй элемент, [::-1] разворачивает (в движках, поддерживающих отрицательные шаги). Невключаемая верхняя граница — самая частая ошибка в срезах; вид «Пути» показывает точный индекс каждого выбранного элемента, чтобы вы могли проверить границу одним взглядом.
Что такое селектор-объединение и как выбрать несколько ключей сразу?
Селектор-объединение перечисляет несколько имён или индексов внутри одной скобки и собирает их все: $['title','author'] выбирает оба члена из объекта, а $.store.book[0,2] выбирает первый и третий элементы массива book. Его можно сочетать с другими селекторами — $.store.book[*]['title','price'] извлекает название и цену каждой книги. Объединения удобны, когда нужна фиксированная проекция нескольких полей, а не весь объект или подстановка. Вид «Оба» — самый наглядный способ читать результат объединения, поскольку он сопоставляет каждое выбранное значение его нормализованному пути, так что видно, какое имя или индекс дали каждую запись.
Можно ли поделиться запросом JSONPath и его JSON по ссылке?
Да — и эта ссылка не требует обращения к серверу. Нажмите «Копировать ссылку» на панели действий: тестер кодирует JSON, выражение, активный движок и вид результата в хеш URL. Любой, кто откроет ссылку, восстанавливает страницу с тем же состоянием, локально на своей машине. Поскольку данные живут во фрагменте-хеше, они никогда не передаются на сервер go-tools.org — браузеры не отправляют фрагмент в HTTP-запросах — и они никогда не попадают в наши журналы доступа. Длина ссылки растёт с размером JSON, поэтому для больших документов делитесь только выражением и дайте получателю вставить свои данные, либо используйте кнопку «Загрузить», чтобы открыть файл локально. Это делает постоянные ссылки безопасными для совместной отладки без раскрытия полезной нагрузки какому-либо бэкенду.
Есть ли максимальный размер JSON?
Вычисление ограничено памятью вашего браузера, а не жёстким лимитом, но на практике оптимальны документы размером до нескольких мегабайт — заметно больше, чем почти любой одиночный ответ API. Очень большие массивы с широкими селекторами (рекурсивная подстановка $..* по десяткам тысяч узлов) дадут крупный набор результатов, который дольше отрисовывается; сужайте выражение, чтобы вывод оставался читаемым. Кнопка «Загрузить» читает файл .json или .txt целиком в браузере (он никуда не отправляется), а «Форматировать JSON» переформатирует ввод с отступами, чтобы вы могли разобрать структуру перед запросом. Для многомегабайтных конвейеров данных проверьте выражение здесь на репрезентативном фрагменте, затем запустите тот же путь в коде приложения или в инструменте CLI вроде jq.
Чем это отличается от jsonpath.com и безопасно ли — без eval?
Четыре отличия. (1) Приватность: jsonpath.com и большинство онлайн-движков работают на сервере или встраивают библиотеку, которая вычисляет фильтры через JavaScript eval; этот инструмент работает полностью в вашем браузере и не использует eval вообще. Движок RFC 9535 по умолчанию — реализация без зависимостей и без пути eval, а классический движок (Goessner) построен на jsonpath-plus, зафиксированном на исправленном релизе с явно отключённым eval, что закрывает класс ошибок удалённого выполнения кода, отслеживаемых как CVE-2024-21534 и CVE-2025-1302. Это также означает, что инструмент работает под строгой Content-Security-Policy. (2) Стандарты: это один из немногих онлайн-тестеров, предлагающих настоящий движок RFC 9535, а не только устаревший диалект Goessner. (3) Два движка: можно переключаться между RFC 9535 и Classic, чтобы сравнивать результаты или запускать выражения, скопированные из старых инструментов, бок о бок. (4) Языки: интерфейс доступен на 15 языках. Если нужны лишь быстрые проверки устаревшего синтаксиса, jsonpath.com всё ещё работает; для соответствующего стандарту, приватного вычисления без eval это более безопасный выбор.
Что показывают виды «Значения», «Пути» и «Оба»?
Результат запроса JSONPath — это список узлов, набор узлов внутри вашего документа. Вид «Значения» отображает эти узлы как JSON-массив совпавших значений, ровно то, что вы потребляли бы в коде. Вид «Пути» вместо этого отображает нормализованный путь каждого совпадения — каноническое расположение в скобках и кавычках вида $['store']['book'][0]['title'], которое однозначно определяет, где в документе находится значение, независимо от того, как было написано ваше выражение. Нормализованные пути — концепция RFC 9535 и они незаменимы при отладке: два разных выражения, выбирающих один и тот же узел, дают один и тот же нормализованный путь. Вид «Оба» показывает эти два рядом, чтобы вы могли сопоставить каждое значение его расположению с первого взгляда. Выбранный вид сохраняется между сеансами через localStorage.
Работает ли это офлайн и как насчёт Content-Security-Policy?
Да в обоих случаях. Поскольку каждое вычисление выполняется в вашем браузере без сетевых вызовов, инструмент продолжает работать после загрузки страницы, даже если вы перейдёте в офлайн. А поскольку ни один из движков не использует eval или конструктор Function для вычисления выражений-фильтров, инструмент работает под строгой Content-Security-Policy, запрещающей unsafe-eval, — политикой, которую внедряют многие заботящиеся о безопасности организации и которая ломает библиотеки JSONPath на основе eval. Движок RFC 9535 разбирает и интерпретирует выражения собственной грамматикой, а не компилирует их в JavaScript, а классический движок сконфигурирован с отключённым eval. Если вам нужно вычислять JSONPath внутри защищённой внутренней среды, этот инструмент спроектирован так, чтобы работать там без исключений в политике.

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

Все инструменты →

Base64 декодер и кодировщик

Кодирование и форматирование

Декодирование и кодирование Base64 онлайн бесплатно. Преобразование в реальном времени с полной поддержкой UTF-8 и эмодзи. Полная приватность — работает в браузере. Без регистрации.

Конвертер Base64 в изображение

Кодирование и форматирование

Декодируйте строку Base64 или data URI обратно в изображение прямо в браузере. Предпросмотр, размеры и MIME, затем скачивание как PNG, JPG, GIF, SVG. Без загрузки.

Конвертер CSV в JSON

Кодирование и форматирование

Конвертируйте CSV в JSON в браузере. RFC 4180, определение типов, заголовок, безопасность больших целых. 100% приватно, без загрузки.

Конвертер .env в JSON

Кодирование и форматирование

Вставьте файл .env — получите JSON мгновенно. Пароли БД, API-ключи и токены не покидают браузер: 100% приватно, без загрузки, парсер dotenv.

Конвертер HTML в Markdown

Кодирование и форматирование

Конвертируйте HTML в чистый Markdown прямо в браузере — GFM-таблицы, списки задач и ссылки. Выбирайте ATX/Setext заголовки и inline или reference ссылки. Удобно для переноса веб-контента и подачи в LLM. 100% приватно.

Конвертер изображений в Base64

Кодирование и форматирование

Кодируйте изображения в data URI Base64 прямо в браузере — PNG, JPG, GIF, WebP, SVG, ICO. Копируйте вывод для HTML, CSS, Markdown и JSON. 100% приватно, без загрузки.