§

Testuj wyrażenia JSONPath

Format wyjściowy:
Skrócona dokumentacja JSONPath
Token Meaning
$Element główny dokumentu
@Bieżący element (używany wewnątrz wyrażeń filtrujących)
.Operator elementu potomnego: wybiera nazwany element potomny
..Zejście rekurencyjne: przeszukuje wszystkich potomków
*Wildcard: dopasowuje dowolny element lub właściwość
[*]Wszystkie elementy tablicy
[n]Element tablicy o indeksie n (od zera)
[start:end]Wycinek tablicy od start do end (bez end)
[?(@.x)]Filtr: elementy gdzie właściwość x istnieje
[?(@.x==1)]Filtr: elementy gdzie właściwość x równa się 1
[(@.length-1)]Wyrażenie skryptowe: ostatni element tablicy

JSONPath pojawia się wszędzie tam, gdzie kontrakt API musi być sprawdzony względem prawdziwego payloadu. Polskie zespoły fintech piszące zestawy regresyjne Postman asertują pola odpowiedzi przez JSONPath w zakładce Test, skrypty k6 pobierają wartości z odpowiedzi API przez jsonpath() do kontroli progów SLA w blokach check(), a runbooki SRE sięgają po wyrażenia filtrujące jak [?(@.status=="error")] do cięcia logów JSON CloudWatch przed alertami. Uruchomienie tych wyrażeń w zakładce przeglądarki trzyma własnościowe payloady fixture, PII klientów i odpowiedzi API sprzed wydania z dala od jakichkolwiek hostowanych usług zapytań.

Czym jest JSONPath?

JSONPath to język zapytań dla dokumentów JSON, odpowiednik JSON dla XPath w XML. Stefan Goessner zaproponował go w 2007 roku jako krótki, czytelny sposób wskazywania węzła wewnątrz drzewa JSON bez pisania parsera. Wyrażenie zaczyna się od selektora głównego $ i łączy akcesory właściwości, indeksy tablic, wildcardy, zejście rekurencyjne i warunki filtrujące, aż wybierze szukane węzły. W 2024 roku IETF opublikował RFC 9535 w celu standaryzacji składni, która rozeszła się między implementacjami; ten tester działa na jsonpath-plus, szeroko stosowanej implementacji JavaScript obejmującej szkic Goessnera, większość RFC 9535 i kilka dodatkowych operatorów.

Jak działa JSONPath?

Wyrażenie JSONPath czyta się od lewej do prawej i przechodzi dokument JSON krok po kroku. Każdy krok pobiera zbiór węzłów, który przeżył poprzedni krok, i zawęża go dalej. Pełny potok ewaluacji:

  1. Zakotwiczyć selektorem głównym $. Każde wyrażenie zaczyna się tutaj, wskazując na wartość najwyższego poziomu, niezależnie czy jest to obiekt czy tablica. Nazwy właściwości bez wiodącego $ nie są poprawnym JSONPath.
  2. Wchodzić do elementów potomnych notacją z kropką ($.store.book) lub notacją z nawiasami ($['store']['book']). Notacja z nawiasami jest wymagana gdy klucz zawiera spację, łącznik lub inny znak niebędący poprawnym identyfikatorem.
  3. Przeszukiwać każdy poziom naraz operatorem zejścia rekurencyjnego ... Wyrażenie $..author zbiera każdą wartość author w całym drzewie niezależnie od głębokości. To operator, którego JMESPath nie ma.
  4. Pobierać elementy tablicy po indeksie ([0], [-1] dla ostatniego elementu w jsonpath-plus), kroić je notacją [start:end] ([0:3] zwraca pierwsze trzy), lub pobierać każdy element wildcardem [*].
  5. Filtrować elementy predykatem wewnątrz [?(...)]. Wewnątrz predykatu @ odnosi się do bieżącego elementu, więc [?(@.price<10)] zachowuje tylko elementy, których pole price jest mniejsze niż 10. Filtry składają się z resztą ścieżki, więc można filtrować a potem schodzić, lub schodzić a potem filtrować.
  6. Wybrać format wyjściowy. Wartości zwracają same dopasowane dane. Ścieżki zwracają JSONPath każdego dopasowania, byś mógł zobaczyć co silnik rozwiązał. Wskaźniki zwracają równoważny wskaźnik JSON RFC 6901 dla każdego dopasowania, przydatny gdy konsument pobierający jest JSON Patch lub walidatorem JSON Schema.

Dlaczego używać tego testera JSONPath?

  • Twój JSON nigdy nie opuszcza przeglądarki. Zapytanie działa wewnątrz strony, więc produkcyjne fixture, PII klientów i odpowiedzi API sprzed wydania zostają na Twoim komputerze.
  • Silnikiem jest jsonpath-plus 9.x, ta sama biblioteka, która wspiera wiele produkcyjnych zestawów testowych i asercji CI. Wyniki, które tu widzisz, odpowiadają wynikom, które zobaczy Twój pipeline budowania.
  • Trzy tryby wyjściowe pokrywają typowych konsumentów: surowe Wartości do kopiowania i wklejania, Ścieżki do debugowania rozwiązywania przez silnik i Wskaźniki RFC 6901 dla przepływów JSON Patch i JSON Schema.
  • Wyrażenia filtrujące działają z preventEval: true, więc wklejone zapytanie nie może wykonać arbitralnego JavaScript na stronie hosta. To ważne, gdy wyrażenie pochodzi ze wiadomości Slack, biletu Jira lub schowka kolegi.

Typowe zastosowania JSONPath

JSONPath pojawia się wszędzie tam, gdzie kod musi wyciągnąć pole z payloadu JSON bez ręcznego pisania zejścia rekurencyjnego:

  • Testy Postman: zakładka Tests w Postman udostępnia pm.response.json() razem z dostępem w stylu JSONPath dla asercji. Zespoły piszą jedno wyrażenie jak $.data.user.email, by wyciągnąć pole z odpowiedzi i asertować je w CI.
  • Testy obciążeniowe k6: skrypty k6 wywołują jsonpath() wewnątrz bloku check(), by wyciągać wartości z ciał odpowiedzi i asertować progi SLA. To samo wyrażenie, które udowodniło kontrakt w Postman, może bramkować test obciążeniowy w k6.
  • DSL JSON do transformacji danych: AWS Step Functions ewaluuje JSONPath wewnątrz InputPath, ResultPath i Parameters, by reshapować payloady zdarzeń między stanami. Argo Workflows używa JSONPath w withParam, by fan-outować zadania po tablicy. Kubernetes kubectl -o jsonpath używa tej samej składni, by wyciągać pola z obiektów klastra.

Przykład krok po kroku

Kanoniczny fixture Goessnera to dokument księgarni z czterema książkami, każda zawierająca category, author, title i price. Na tym fixture wyrażenie $.store.book[?(@.price<10)].title działa w trzech krokach. Po pierwsze $.store.book rozwiązuje się do tablicy wszystkich czterech książek. Następnie filtr [?(@.price<10)] zachowuje tylko tę jedną książkę wycenioną poniżej 10 (wpis przy 8.95). Na koniec .title wyciąga tytuł tej książki. Wynikiem jest ["Sayings of the Century"]. Przełączenie na Ścieżki zwraca ["$['store']['book'][0]['title']"], a Wskaźniki zwracają ["/store/book/0/title"].

Prototypuj wyrażenia tutaj, a następnie upuszczaj je prosto do Postman, k6, kubectl lub maszyny stanów Step Functions. Wklej, zapytaj, skopiuj. Nic nie przekracza sieci.

Czym jest JSONPath?

JSONPath to język zapytań dla dokumentów JSON, analogiczny do XPath dla XML. Zaproponowany przez Stefana Goessnera w 2007 roku i standaryzowany przez IETF jako RFC 9535 w 2024, używa zwartej składni wyrażeń zaczynającej się od $ (główny element dokumentu) i obsługuje notację z kropką, indeksy tablic, wildcardy, wycinki, zejście rekurencyjne (..) i wyrażenia filtrujące ([?(...)]) do wybierania węzłów wewnątrz drzewa JSON.

Czym JSONPath różni się od JMESPath lub jq?

Wszystkie trzy zapytują JSON, ale ich gramatyki i cele różnią się. JMESPath to standard AWS CLI / SDK: ściślejszy niż JSONPath, bez zejścia rekurencyjnego, zbudowany dla przewidywalnej projekcji bez efektów ubocznych. jq to kompletny językowo skryptowy język, który nie tylko zapytuje JSON, ale też go przekształca, redukuje i strumieniuje. JSONPath leży pomiędzy: bardziej ekspresywny niż JMESPath dzięki zejściu rekurencyjnemu i filtrom, lżejszy niż jq, i najbardziej obsługiwana składnia w ogólnym narzędziu testowym (Postman, Playwright, REST Assured, kubectl, Step Functions). Ten tester implementuje JSONPath.

Jakiego dialektu używa ten tester?

Ten tester działa na jsonpath-plus 9.x. Ta biblioteka implementuje specyfikację Goessnera z 2007, pokrywa większość RFC 9535 i dodaje operatory rozszerzające takie jak sprawdzanie typów (@.string(), @.number(), @.boolean()) i nawigacja do rodzica (^). Flaga preventEval: true jest zawsze ustawiona, więc predykaty filtrujące działają przez bezpieczny interpreter zamiast wbudowanego JavaScript eval(). Wklejone zapytanie nie może wykonać arbitralnego kodu na tej stronie.

Czy mogę kopiować poszczególne dopasowane wartości?

Tak. Przycisk Kopiuj do schowka kopiuje cały blok wyników jako tablicę JSON. By pobrać pojedynczą wartość, przełącz tryb wyjściowy na Wartości, a następnie zaznacz wiersz który chcesz w polu tekstowym wyników i użyj normalnego skrótu kopiowania przeglądarki (Ctrl/Cmd + C). Wynik to czysty tekst JSON, więc wkleja się czysto do edytora kodu, terminala, testu Postman lub wiadomości Slack.