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, выражения и результаты не покидают браузер; работает офлайн после кеширования страницы

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

  1. Вставьте JSON-документ для запроса в левое текстовое поле.
  2. Выберите режим: JSONPath (хорош для селекторов с шаблонами) или JSON Pointer (хорош, чтобы однозначно назвать один узел).
  3. Введите выражение в поле запроса — примеры показаны в плейсхолдере для каждого режима.
  4. Нажмите «Выполнить запрос» или Enter в поле. Совпадения появляются с конкретными путями и значениями; счётчик показывает, сколько найдено.
  5. Копируйте отдельные значения значком возле каждого совпадения или используйте «Копировать всё» для полного списка `путь: значение`.
  6. Используйте «Загрузить пример», чтобы заполнить оба ввода рабочим примером, если новички в синтаксисе.

Советы и лучшие практики

  • Если не уверены, есть ли в вашем 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-потоков работы; этот — когда нужно просто извлечь значения.