Что такое JSONPath?

JSONPath — это язык запросов для JSON, аналогичный XPath для XML. Он позволяет навигировать и извлекать данные из структуры JSON с помощью выражений пути. Выражение JSONPath начинается с $, которое представляет корень документа, и использует точечную нотацию (.key) или скобочную нотацию (['key']) для обхода объектов, а также [index] для доступа к элементам массива.

JSONPath был первоначально описан Стефаном Гёсснером в 2007 году и с тех пор стал широко используемым стандартом в API, фреймворках тестирования и конвейерах обработки данных. Он поддерживается во многих языках и инструментах, включая JavaScript, Python, Java и базы данных, такие как PostgreSQL и MySQL.

Описание инструмента

Этот инструмент позволяет вставить любой корректный JSON-документ и написать выражение JSONPath для его запроса. Результаты отображаются мгновенно по мере ввода, показывая все совпадающие значения в виде отформатированного JSON-массива. Количество совпадений отображается отдельно, чтобы вы могли быстро проверить, сколько узлов было выбрано.

Примеры

Входной JSON:

{
  "store": {
    "book": [
      { "title": "Moby Dick", "price": 8.99, "category": "fiction" },
      { "title": "War and Peace", "price": 12.5, "category": "fiction" },
      {
        "title": "A Brief History of Time",
        "price": 7.99,
        "category": "science"
      }
    ]
  }
}
Выражение Результат
$.store.book[*].title Все названия книг
$.store.book[0] Первый объект книги
$.store.book[?(@.price < 10)] Книги дешевле $10
$.store.book[?(@.category == "fiction")] Только художественные книги
$..price Все значения цены в любом месте документа

Возможности

  • Оценка в реальном времени — результаты обновляются по мере ввода выражения или редактирования JSON
  • Отображение количества совпадений в отдельном поле
  • Кнопка копирования в поле выражения для быстрого повторного использования
  • Кнопка вставки для быстрого вставления JSON или выражений из буфера обмена
  • Сообщения об ошибках для некорректного JSON или неправильно сформированных выражений пути

Как это работает

Выражения JSONPath вычисляются для разобранного JSON с использованием библиотеки jsonpath-plus. Символ $ относится к корневому элементу. Дочерние узлы доступны через . или [], подстановочные символы через *, рекурсивный спуск через .., а фильтры через [?(...)]. Результат всегда представляет собой массив совпадающих значений, даже если найдено только одно совпадение.

Объяснение параметров

Синтаксис Значение
$ Корневой элемент
.key или ['key'] Дочернее свойство
[*] Все элементы массива
[0] Первый элемент массива (с нулевым индексом)
[-1] Последний элемент массива
[0,2] Элементы с индексами 0 и 2
[0:2] Элементы с индекса 0 по 1 (срез)
..key Рекурсивный спуск — найти key на любой глубине
[?(@.price > 5)] Фильтр — элементы, где price больше 5
@ Текущий узел (используется в выражениях фильтра)

Варианты использования

  • Разработка API — проверка того, что селектор JSONPath, используемый в REST-клиенте, наборе тестов или инструменте сопоставления данных, извлекает ожидаемые поля из ответа API
  • Преобразование данных — определение того, какие значения нужно извлечь из вложенных JSON-полезных нагрузок перед написанием скрипта преобразования
  • Изучение JSONPath — интерактивное экспериментирование с синтаксисом пути для понимания того, как операторы типа .., [*] и [?()] работают с реальными данными

Советы

  • Используйте $..* для получения каждого значения во всем документе — полезно для исследования неизвестных JSON-структур.
  • Выражения фильтра поддерживают сравнения (==, !=, <, >, <=, >=) и могут ссылаться на вложенные свойства: [?(@.author.name == "Rees")].
  • Чтобы найти свойство независимо от его глубины, используйте рекурсивный спуск ..: $..title находит все поля title в любом месте документа.