ToolDeck

JSONPath Tester

Тестуйте JSONPath-вирази на JSON-даних і переглядайте результати збігів

Спробувати приклад

JSON-ввід

Результати

Працює локально · Безпечно вставляти секрети
Результати з'являться тут…

Що таке JSONPath?

JSONPath — це мова запитів для вилучення значень з JSON-документів. Спочатку запропонований Стефаном Гесснером у 2007 році як аналог XPath для XML, JSONPath дозволяє писати вирази на зразок $.store.book[*].author для вибору всіх полів автора в масиві book без написання циклів або коду ручного обходу. Мова була стандартизована у лютому 2024 року як RFC 9535, опублікований IETF.

JSONPath-вираз завжди починається з $, що позначає корінь документа. Далі ланцюжком йдуть селектори: крапкова нотація для ключів об'єкта, дужкова нотація для індексів масиву, символи підстановки для всіх дочірніх елементів і оператор рекурсивного спуску (..) для пошуку на кожному рівні вкладеності. Вирази фільтрації на зразок [?(@.price < 10)] дозволяють вибирати елементи на основі умов, що оцінюються щодо їхніх значень.

JSONPath використовується в інструментах тестування API, таких як Postman, платформах спостережуваності на зразок Datadog і Splunk, рушіях робочих процесів, як-от Apache NiFi, а також у програмних бібліотеках для JavaScript, Python, Go, Java та C#. Тестування виразів на реальних даних перед їхнім вбудовуванням у код або конфігураційні файли запобігає прихованим збоям, коли структура JSON не відповідає вашим припущенням.

Чому варто використовувати цей JSONPath Tester?

Написання JSONPath-виразів вручну схильне до помилок. Пропущена крапка, неправильний тип дужки або невірний синтаксис фільтра можуть повернути порожні результати без повідомлення про помилку. Цей інструмент надає миттєвий візуальний зворотний зв'язок щодо того, що відповідає вашому виразу.

Миттєві результати
Вставте JSON, введіть вираз і спостерігайте, як збіги оновлюються в реальному часі. Не потрібно запускати скрипт або перезавантажувати сторінку, щоб перевірити запит.
🔒
Пріоритет конфіденційності
Усі обчислення виконуються у вашому браузері. Ваші JSON-дані ніколи не залишають ваш комп'ютер, тому ви можете безпечно тестувати вирази на відповідях API виробничого середовища або конфігураційних файлах із обліковими даними.
📋
Копіюйте результати напряму
Скопіюйте знайдені результати як JSON одним кліком. Вставте їх у тестові твердження, документацію або приклади відповідей API без переформатування.
🛠️
Не потребує налаштування
Жодних npm-пакетів для встановлення, жодних Python virtualenv для створення. Відкрийте сторінку, вставте дані та починайте запити. Працює на будь-якому пристрої з браузером.

Випадки використання JSONPath

Фронтенд-розробка
Витягуйте саме ті вкладені значення, які вам потрібні з відповідей API, перш ніж підключати їх до стану React або обчислюваних властивостей Vue. Спершу перевірте вирази шляху на реальному навантаженні API.
Тестування бекенд API
Postman та REST-assured використовують JSONPath для перевірки тіл відповідей. Побудуйте та перевірте вирази для тверджень тут, перш ніж копіювати їх у тестові скрипти, — це скорочує цикли налагодження.
DevOps-конфігурація
Визначення власних ресурсів Kubernetes, AWS Step Functions і джерела даних Terraform приймають JSONPath-вирази для вилучення значень з JSON-виводів. Валідуйте шлях перед розгортанням.
Автоматизація QA-тестування
Пишіть JSONPath-твердження для контрактних та інтеграційних тестів. Перевіряйте, що ваші вирази коректно збігаються з очікуваними значеннями, коли JSON-структура має необов'язкові або nullable-поля.
Вилучення даних у пайплайнах
Apache NiFi, Logstash та кастомні ETL-скрипти використовують JSONPath для вилучення полів із напівструктурованих даних логів та потоків подій. Тестуйте вирази на прикладових навантаженнях перед розгортанням пайплайну.
Навчання та експерименти
Студенти та розробники, що тільки знайомляться з JSONPath, можуть випробовувати різні вирази на прикладових JSON-даних, щоб зрозуміти, як працюють символи підстановки, рекурсивний спуск і фільтри — без локального середовища.

Довідник синтаксису JSONPath

RFC 9535 визначає стандартний синтаксис JSONPath. Таблиця нижче охоплює оператори, які ви будете використовувати в більшості запитів. Усі вирази починаються з $ (кореневий вузол) і поєднують один або більше селекторів для навігації по структурі документа.

ОператорОписПриклад
$Root element$.store
.keyChild property$.store.book
[n]Array index (zero-based)$.store.book[0]
[*]All elements in array/object$.store.book[*]
..Recursive descent$..author
[start:end]Array slice$.store.book[0:2]
[?()]Filter expression$.store.book[?(@.price<10)]
@Current node (inside filter)$.store.book[?(@.isbn)]

JSONPath проти jq проти XPath

JSONPath, jq та XPath вирішують одну й ту саму задачу (запити до структурованих даних) для різних форматів і випадків використання. JSONPath орієнтований на JSON і доступний як бібліотека в більшості мов. jq — це автономний CLI-інструмент із власною повноцінною мовою фільтрації. XPath працює з XML і є частиною стека специфікацій W3C.

ФункціяJSONPathjqXPath
Формат данихJSONJSONXML
Доступ до першого елемента$.store.book[0].store.book[0]/store/book[1]
Рекурсивний пошук$..price.. | .price?//price
Вираз фільтра[?(@.price<10)]select(.price < 10)[price<10]
СпецифікаціяRFC 9535stedolan.github.ioW3C XPath 3.1

Приклади коду

Як обчислювати JSONPath-вирази в популярних мовах та інструментах. Кожен приклад використовує одну й ту саму JSON-структуру книгарні для порівняння.

JavaScript (jsonpath-plus)
import { JSONPath } from 'jsonpath-plus';

const data = {
  store: {
    book: [
      { title: 'Moby Dick', price: 8.99 },
      { title: 'The Great Gatsby', price: 12.99 }
    ]
  }
};

// Get all book titles
JSONPath({ path: '$.store.book[*].title', json: data });
// → ['Moby Dick', 'The Great Gatsby']

// Recursive descent — find every price in the document
JSONPath({ path: '$..price', json: data });
// → [8.99, 12.99]

// Filter — books under $10
JSONPath({ path: '$.store.book[?(@.price < 10)]', json: data });
// → [{ title: 'Moby Dick', price: 8.99 }]
Python (jsonpath-ng)
from jsonpath_ng.ext import parse
import json

data = {
    "store": {
        "book": [
            {"title": "Moby Dick", "price": 8.99},
            {"title": "The Great Gatsby", "price": 12.99}
        ]
    }
}

# Get all book titles
expr = parse("$.store.book[*].title")
titles = [match.value for match in expr.find(data)]
# → ['Moby Dick', 'The Great Gatsby']

# Recursive descent — all prices
expr = parse("$..price")
prices = [match.value for match in expr.find(data)]
# → [8.99, 12.99]

# Filter — books under $10
expr = parse("$.store.book[?price < 10]")
cheap = [match.value for match in expr.find(data)]
# → [{"title": "Moby Dick", "price": 8.99}]
Go (ohler55/ojg)
package main

import (
    "fmt"
    "github.com/ohler55/ojg/jp"
    "github.com/ohler55/ojg/oj"
)

func main() {
    src := `{
        "store": {
            "book": [
                {"title": "Moby Dick", "price": 8.99},
                {"title": "The Great Gatsby", "price": 12.99}
            ]
        }
    }`

    obj, _ := oj.ParseString(src)

    // Get all book titles
    expr, _ := jp.ParseString("$.store.book[*].title")
    results := expr.Get(obj)
    fmt.Println(results)
    // → [Moby Dick The Great Gatsby]

    // Recursive descent — all prices
    expr2, _ := jp.ParseString("$..price")
    fmt.Println(expr2.Get(obj))
    // → [8.99 12.99]
}
CLI (jq alternative syntax)
# jq uses its own syntax, not JSONPath, but solves the same problem.
# Mapping common JSONPath patterns to jq:

# $.store.book[*].title → get all titles
echo '{"store":{"book":[{"title":"Moby Dick"},{"title":"Gatsby"}]}}' | \
  jq '.store.book[].title'
# → "Moby Dick"
# → "Gatsby"

# $..price → recursive descent for "price" keys
echo '{"a":{"price":1},"b":{"price":2}}' | \
  jq '.. | .price? // empty'
# → 1
# → 2

# Filter: books where price < 10
echo '{"store":{"book":[{"title":"A","price":8},{"title":"B","price":12}]}}' | \
  jq '.store.book[] | select(.price < 10)'
# → {"title":"A","price":8}

Часті запитання

У чому різниця між JSONPath та jq?
JSONPath — це мова запитів, призначена для вбудовування в застосунки як бібліотека. Вона повертає збіги значень із JSON-документа за допомогою виразів шляху. jq — це автономний інструмент командного рядка з повноцінною мовою програмування для трансформації JSON, включаючи умовні конструкції, функції та інтерполяцію рядків. Використовуйте JSONPath, коли вам потрібен запит, вбудований у код або інструмент на зразок Postman. Використовуйте jq для нерегулярної трансформації даних у командному рядку.
Чи є JSONPath офіційним стандартом?
Так. IETF опублікував RFC 9535 ("JSONPath: Query Expressions for JSON") у лютому 2024 року. До цього JSONPath існував лише як неформальна специфікація Стефана Гесснера від 2007 року, що призводило до розбіжностей між реалізаціями. RFC 9535 визначає синтаксис, семантику та формат нормалізації для сумісності.
Як працює рекурсивний спуск (..) у JSONPath?
Оператор рекурсивного спуску (..) шукає на кожному рівні JSON-документа ключ, що слідує за ним. Наприклад, $..price повертає всі значення, пов'язані з ключем "price", незалежно від глибини їхнього вкладення. Це еквівалентно обходу в глибину, що збирає відповідні вузли. Майте на увазі, що на великих документах рекурсивний спуск може повернути багато результатів і бути повільнішим за прямий шлях.
Чи може JSONPath змінювати JSON-дані?
Ні. JSONPath — це мова запитів лише для читання. Вона вибирає та повертає значення, але не може вставляти, оновлювати або видаляти вузли. Щоб змінювати JSON на основі JSONPath-виразу, вам потрібно використовувати функції маніпуляції JSON вашої мови програмування після виконання запиту. Деякі бібліотеки, на зразок jsonpath-ng у Python, надають метод set() для об'єктів збігів, але це розширення бібліотеки, а не частина специфікації JSONPath.
Що означає символ @ у виразах фільтрів JSONPath?
Символ @ посилається на поточний вузол, що оцінюється у виразі фільтра. У $.store.book[?(@.price < 10)] фільтр ітерує по кожному елементу масиву book, а @ представляє кожен об'єкт book по черзі. @.price звертається до поля price поточної книги. Без @, фільтр не знав би, властивості якого вузла перевіряти.
Як обробляти ключі зі спеціальними символами або пробілами у JSONPath?
Використовуйте дужкову нотацію з лапками: $['store']['book title']. Дужкова нотація працює для будь-якого ключа, включаючи ті, що містять крапки, пробіли або символи Unicode. Крапкова нотація ($.store.key) працює лише для ключів, що є коректними ідентифікаторами (літери, цифри, підкреслення). RFC 9535 вимагає від реалізацій підтримки як однинарних, так і подвійних лапок у дужковій нотації.
Чому мій JSONPath-вираз повертає порожні результати?
Найпоширеніші причини: друкарська помилка в назві ключа (JSONPath чутливий до регістру), використання крапкової нотації для ключа, що містить спеціальні символи, відсутність кореневого символу $ на початку або припущення, що значення є масивом, хоча насправді це одиничний об'єкт. Вставте ваш JSON в інструмент для тестування та спробуйте спочатку простіші підвирази (наприклад, $.store), щоб перевірити, що кожен сегмент вашого шляху розпізнається коректно, перш ніж додавати більше селекторів.