Запрос и извлечение данных из JSON с использованием выражений JSONPath
Возможности
- Расширенный Синтаксис Запросов: Поддержка полного синтаксиса JSONPath, включая подстановочные знаки (*), рекурсивный спуск (..), нарезку массивов ([start:end]), фильтры ([?(@.price < 10)]) и множественные селекторы путей
- Шаблоны Выражений Путей: Предварительно созданные шаблоны для общих запросов: корневой доступ ($), прямой дочерний ($.key), элементы массива ($.arr[*]), отфильтрованные элементы ($.arr[?(@.id)]), рекурсивный поиск ($..key)
- Предпросмотр в Реальном Времени: Мгновенное выполнение запросов с подсветкой синтаксиса JSON ввода и вывода, отображение совпадающих путей, подсчет результатов и выделение совпавших узлов в исходном JSON
- Экспорт Результатов: Экспорт результатов запроса как JSON (массив или одно значение), CSV для табличных данных или форматированного текста с опциями копирования и загрузки в один клик
Руководство по использованию
- Ввести Данные JSON: Вставить или загрузить данные JSON, которые вы хотите запросить
- Написать JSONPath: Ввести выражение JSONPath или использовать шаблоны для общих паттернов
- Выполнить Запрос: Запустить запрос для просмотра совпадающих результатов с подсветкой синтаксиса
- Экспортировать Результаты: Скопировать или загрузить извлеченные данные в предпочитаемом формате
Технические детали
Синтаксис JSONPath
Выражения JSONPath начинаются с $ (корневой объект) и используют точечную нотацию ($.property) или скобочную нотацию ($['property']) для доступа. Дочерние узлы используют разделитель . ($.store.book), массивы используют [index] или [*] для всех элементов. Нарезка массива [start:end:step] извлекает диапазоны, такие как [0:3] (первые 3 элемента) или [-1] (последний элемент). Оператор рекурсивного спуска .. ищет на всех уровнях: $..author находит все свойства author независимо от глубины вложения. Оператор объединения [,] выбирает несколько элементов: $[0,2,5] получает конкретные индексы массива.
Фильтрующие Выражения
Фильтры используют синтаксис [?(@.condition)] для выбора элементов, соответствующих критериям. @ представляет текущий узел в итерации. Операторы сравнения: ==, !=, <, <=, >, >=. Логические операторы: && (и), || (или), ! (не). Примеры: [?(@.price < 10)] выбирает элементы с ценой ниже 10; [?(@.category == 'fiction' && @.price < 20)] комбинирует условия. Сопоставление регулярных выражений: [?(@.name =~ /pattern/)] фильтрует по регулярному выражению. Фильтры могут ссылаться на корень с $ для сравнений в иерархии: [?(@.price < $.maxPrice)].
Варианты Реализации
JSONPath имеет несколько реализаций с небольшими вариациями синтаксиса: оригинал Goessner (JavaScript), Jayway (Java), jsonpath-ng (Python). Различия включают операторы фильтров (некоторые используют @ vs $), поддержку регулярных выражений, скриптовые выражения и функциональные расширения. Некоторые реализации добавляют функции, такие как @.length, @.min(), @.max() для агрегации. Скриптовые выражения [(@.price * @.quantity)] обеспечивают вычисления. Родительский оператор ^ и текущий путь ~ предоставляют контекст. Всегда проверяйте документацию целевой реализации для поддерживаемых функций и особенностей синтаксиса.
Часто задаваемые вопросы
- Почему запрос не возвращает результатов?
- Убедитесь, что путь начинается с $, индексы массивов корректны, а имена полей совпадают. Сначала проверьте простой путь.
- Как искать ключ на любой глубине?
- Используйте рекурсивный спуск: $..author найдёт author на всех уровнях.
- Как записывать фильтры?
- Используйте [?(@.price < 10)]. @ обозначает текущий элемент. Комбинируйте условия с && и ||.
- Чем отличается пустой результат от null?
- Пусто означает отсутствие совпадений; null означает, что значение совпавшего поля равно null. Проверьте исходные данные и выражение.
- Производительность на больших JSON?
- Избегайте чрезмерного использования ..; сначала сужайте область, затем фильтруйте. Рассмотрите стриминг или серверную обработку.
Связанная документация
- Спецификация JSONPath - Goessner - Оригинальное предложение JSONPath и определение синтаксиса
- Онлайн Эвалюатор JSONPath - Интерактивный тестер JSONPath с документацией выражений
- RFC 9535 - Стандарт JSONPath - Усилия IETF по стандартизации языка запросов JSONPath
- Документация jsonpath-ng - Реализация Python JSONPath с расширенными функциями
- Jayway JSONPath (Java) - Популярная реализация Java с фильтрующими выражениями