JSON-запрос
Извлекайте значения из JSON выражениями JSONPath или RFC 6901 JSON Pointer
JSON
Запрос
JSON-запрос
Извлекайте значения из JSON выражениями JSONPath или RFC 6901 JSON Pointer
Возможности
- Два режима запроса рядом: JSONPath (на общем QueryService с шаблонами и доступом через скобки) и RFC 6901 JSON Pointer (со слешами, с экранированием ~0/~1) — выберите синтаксис, соответствующий вашим инструментам
- Шаблон `*` на любом сегменте пути раскрывается во все ключи объекта или элементы массива на этом уровне — `$.store.books[*].title` возвращает все названия книг без цикла
- Каждое совпадение показано с конкретным путём И значением: результаты — не один ответ, а список путей; раскрытие шаблона даёт N строк для индивидуального или группового копирования
- Режим JSON Pointer валидирует синтаксис сегмента: начинается с `/`, целочисленные сегменты индексируют массивы, именованные — объекты, `~1` декодируется в `/`, `~0` в `~` — та же семантика, что у JSON Schema instancePath и JSON Patch
- Кнопка копирования на каждое совпадение пишет значение в буфер обмена (строки сырые, структуры как pretty-print JSON), а «Копировать всё» выгружает полный список `путь: значение` как простой текст
- Ошибки разбора и ошибки запроса всплывают отдельно с полным сообщением движка JS — сразу видно, виноват ли ваш JSON или выражение
- «Загрузить пример» заполняет маленький документ книжного с рабочим запросом для активного режима — полезный первоначальный ориентир по синтаксису
- Полностью на стороне клиента: JSON, выражения и результаты не покидают браузер; работает офлайн после кеширования страницы
Как использовать
- Вставьте JSON-документ для запроса в левое текстовое поле.
- Выберите режим: JSONPath (хорош для селекторов с шаблонами) или JSON Pointer (хорош, чтобы однозначно назвать один узел).
- Введите выражение в поле запроса — примеры показаны в плейсхолдере для каждого режима.
- Нажмите «Выполнить запрос» или Enter в поле. Совпадения появляются с конкретными путями и значениями; счётчик показывает, сколько найдено.
- Копируйте отдельные значения значком возле каждого совпадения или используйте «Копировать всё» для полного списка `путь: значение`.
- Используйте «Загрузить пример», чтобы заполнить оба ввода рабочим примером, если новички в синтаксисе.
Советы и лучшие практики
- Если не уверены, есть ли в вашем JSON ключ, сначала используйте шаблон, чтобы перечислить, что действительно есть, потом сузьте.
- Пути JSON Pointer сортируются как строки — полезно, когда нужно сравнить наборы путей между двумя структурами.
- Если запрос возвращает одно совпадение, но вы ожидали несколько, проверьте опечатки (`book` vs `books`) — JSONPath здесь возвращает точное совпадение ключа, не нечёткое.
- Для глубоко вложенных данных JSON Pointer короче JSONPath, потому что не несёт разделители `$` и `.` — полезно в чате или сообщениях коммитов.
- Сочетайте с JSON Tree: сначала визуально перемещайтесь, затем копируйте известный-хороший pointer в этот инструмент для повторного использования.
Вопросы и ответы
Какой синтаксис JSONPath поддерживается?
Минимальное, но полезное подмножество: `$` корень, `.key` доступ к члену, `['key']` доступ в кавычках (для ключей с точками или специальными символами), `[N]` индекс массива и `*` шаблон в любом сегменте. Фильтры (`[?(@.price < 30)]`), оператор потомков (`..`) и срезы (`[1:3]`) здесь не поддерживаются — для них используйте вкладку JSONPath в JSON Formatter с более богатым движком.
В чём разница между JSONPath и JSON Pointer?
JSONPath — язык запросов (XPath-для-JSON) — может выбирать несколько узлов через шаблоны, потомков и предикаты. JSON Pointer (RFC 6901) — нотация пути — называет ровно ОДИН узел, и он либо существует, либо нет. Используйте JSONPath, когда нужен НАБОР результатов; JSON Pointer, когда нужна одна детерминированная позиция (например, для JSON Patch или копирования неудачного instancePath из валидатора схемы).
Зачем мне нужны оба режима?
Разные инструменты и стандарты используют разные нотации. Ошибки instancePath JSON Schema — это JSON Pointer. fast-json-patch использует JSON Pointer. JSONPath — то, что ожидают большинство CLI-инструментов для запросов JSON и многие библиотеки. Наличие обоих режимов здесь означает, что вы можете копировать путь между инструментами без переписывания.
Как обрабатываются ключи со специальными символами?
JSONPath: возьмите в кавычки в скобках — `$['weird.key']` обращается к ключу с буквальным именем `weird.key`. JSON Pointer: экранирование по RFC 6901 — `/` в ключе становится `~1`, `~` становится `~0`. Плейсхолдер показывает стандартную форму для каждого режима.
Что если путь ни с чем не совпадает?
Вы получаете результат 0 совпадений и заметку «Запрос не вернул совпадений», а не ошибку. Это нормальное соглашение JSONPath / JSON Pointer: отсутствующие пути — отсутствие, не сбой. Отличайте отсутствие от некорректного ввода по тому, появилась ли строка ошибки.
Могут ли шаблоны спускаться во вложенные массивы?
Да, на каждом уровне. `$.users[*].roles[*]` шаблон сначала по всем пользователям, потом по ролям каждого, давая каждую строку роли. Таблица вывода показывает разрешённый конкретный путь каждого совпадения (например, `$.users[0].roles[2]`) — полезно, когда нужно точно знать, откуда пришёл попадание.
Отправляется ли что-нибудь на сервер?
Нет. JSON.parse работает в вашем браузере, оценка JSONPath / JSON Pointer работает в браузере, и совпадения рендерятся на странице без сетевых запросов. Вкладка «Сеть» в DevTools ничего не показывает при нажатии «Выполнить запрос».
Чем это отличается от вкладки запроса в JSON Formatter?
JSON Formatter — это мульти-инструмент: формат, валидация, схема, JSONPath, diff. Этот отдельный JSON-запрос — минимальный интерфейс: один URL, два режима, результаты-как-список с копированием на совпадение, без лишней площади. Используйте Formatter, когда нужен один вид, объединяющий несколько JSON-потоков работы; этот — когда нужно просто извлечь значения.