Co je JSONPath?
JSONPath je dotazovací jazyk pro JSON dokumenty, JSON ekvivalent XPath pro XML. Stefan Goessner jej navrhl v roce 2007 jako krátký čitelný způsob, jak ukázat na uzel uvnitř JSON stromu bez psaní parseru. Výraz začíná kořenovým selektorem $ a řetězí přístupy k vlastnostem, indexy polí, zástupné znaky, rekurzivní sestup a podmínky filtrů, dokud nevybere uzly, které chcete. V roce 2024 IETF publikovala RFC 9535 pro standardizaci syntaxe, která se roztříštila napříč implementacemi; tento tester běží na jsonpath-plus, široce používané JavaScript implementaci, která pokrývá Goessner draft, většinu RFC 9535 a několik rozšiřujících operátorů navrch.
Jak JSONPath funguje
JSONPath výraz se čte zleva doprava a prochází JSON dokument jeden krok po kroku. Každý krok vezme množinu uzlů, které přežily předchozí krok, a dále ji zužuje. Celý vyhodnocovací pipeline:
- Kotva s kořenovým selektorem
$. Každý výraz začíná zde, ukazuje na hodnotu na nejvyšší úrovni, ať už je to objekt nebo pole. Holé názvy vlastností bez úvodního$nejsou platný JSONPath. - Vstup do potomků pomocí tečkové notace (
$.store.book) nebo závorkové notace ($['store']['book']). Závorková notace je vyžadována, když klíč obsahuje mezeru, pomlčku nebo jakýkoli znak, který není platným identifikátorem. - Prohledávání všech úrovní najednou pomocí operátoru rekurzivního sestupu
... Výraz$..authorsbírá všechny hodnotyauthorkdekoli ve stromu, bez ohledu na hloubku. Toto je operátor, který JMESPath nemá. - Výběr prvků pole podle indexu (
[0],[-1]pro poslední položku v jsonpath-plus), výřez pomocí notace[start:end]([0:3]vrací první tři) nebo získání všech prvků pomocí zástupného znaku[*]. - Filtrování prvků predikátem uvnitř
[?(...)]. Uvnitř predikátu@odkazuje na aktuální prvek, takže[?(@.price<10)]zachovává pouze položky, jejichž polepriceje menší než 10. Filtry se skládají se zbytkem cesty, takže můžete filtrovat pak sestupovat nebo sestupovat pak filtrovat. - Výběr formátu výstupu. Hodnoty vrací odpovídající data samotná. Cesty vrací JSONPath každé shody, abyste viděli, co engine vyřešil. Pointery vrací ekvivalentní RFC 6901 JSON Pointer pro každou shodu, užitečné, když downstream spotřebitel je JSON Patch nebo JSON Schema validátor.
Proč používat tento JSONPath tester?
- Váš JSON nikdy neopouští prohlížeč. Dotaz běží uvnitř stránky, takže produkční fixture, PII zákazníků a předprodukční API odpovědi zůstávají na vašem stroji.
- Engine je
jsonpath-plus9.x, stejná knihovna, která pohání mnoho produkčních testovacích sad a CI asercí. Výsledky, které vidíte zde, odpovídají výsledkům, které uvidí váš build pipeline. - Tři výstupní režimy pokrývají běžné downstream spotřebitele: surové Hodnoty pro kopírování, Cesty pro ladění rozlišení enginu a RFC 6901 Pointery pro JSON Patch a JSON Schema workflow.
- Filtrační výrazy běží s
preventEval: true, takže vložený dotaz nemůže spustit libovolný JavaScript proti hostitelské stránce. To je důležité, když výraz přišel ze Slack zprávy, Jira ticketu nebo schránky kolegy.
Běžná použití JSONPath
JSONPath se objevuje všude, kde kód musí vytáhnout pole z JSON payloadu bez psaní rekurzivního sestupu ručně:
- Postman testy: záložka Tests v Postmanu poskytuje
pm.response.json()spolu s JSONPath-style přístupem pro aserce. Týmy píší jediný výraz jako$.data.user.emailpro vytažení pole z odpovědi a aserci v CI. - k6 load testy: k6 skripty volají
jsonpath()uvnitř blokucheck()pro extrakci hodnot z těla odpovědi a aserci SLA prahů. Stejný výraz, který prokázal kontrakt v Postmanu, může hlídat load test pod k6. - JSON DSL pro datové transformace: AWS Step Functions vyhodnocuje JSONPath uvnitř
InputPath,ResultPathaParameterspro přetváření event payloadů mezi stavy. Argo Workflows používá JSONPath vwithParampro fan-out úkolů přes pole. Kuberneteskubectl -o jsonpathpoužívá stejnou syntaxi pro extrakci polí z clusterových objektů.
Příklad
Kanonickou Goessner fixture je dokument knihkupectví se čtyřmi knihami, každá s category, author, title a price. Proti této fixture výraz $.store.book[?(@.price<10)].title běží ve třech krocích. Nejprve $.store.book vyřeší na pole všech čtyř knih. Dále filtr [?(@.price<10)] zachovává pouze jednu knihu s cenou pod 10 (položka za 8,95). Nakonec .title extrahuje název té knihy. Výsledek je ["Sayings of the Century"]. Přepnutí na Cesty vrací ["$['store']['book'][0]['title']"] a Pointery vrací ["/store/book/0/title"].
Prototypujte své výrazy zde, pak je vložte přímo do Postmanu, k6, kubectl nebo Step Functions state machine. Vložte, dotazujte, kopírujte. Nic nepřekračuje síť.
Co je JSONPath?
JSONPath je dotazovací jazyk pro JSON dokumenty, analogický XPath pro XML. Navržen Stefanem Goessnerem v roce 2007 a standardizován IETF jako RFC 9535 v roce 2024.
Používá kompaktní syntaxi výrazů začínající $ (kořen dokumentu) a podporuje tečkovou notaci, indexy polí, zástupné znaky, výřezy, rekurzivní sestup (..) a filtrační výrazy ([?(...)]) pro výběr uzlů uvnitř JSON stromu.
Jak se JSONPath liší od JMESPath nebo jq?
Všechny tři dotazují JSON, ale jejich gramatiky a cíle se liší. JMESPath je AWS CLI / SDK standard: přísnější než JSONPath, bez rekurzivního sestupu, postavený pro předvídatelnou projekci bez vedlejších efektů.
jq je Turingovsky úplný skriptovací jazyk, který nejen dotazuje JSON, ale také transformuje, redukuje a streamuje. JSONPath sedí mezi nimi: výraznější než JMESPath díky rekurzivnímu sestupu a filtrům, lehčí než jq a nejvíce podporovaná syntaxe v obecných testovacích nástrojích (Postman, Playwright, REST Assured, kubectl, Step Functions). Tento tester implementuje JSONPath.
Jaký dialekt tento tester používá?
Tento tester běží na jsonpath-plus 9.x. Tato knihovna implementuje Goessner 2007 specifikaci, pokrývá většinu RFC 9535 a přidává rozšiřující operátory jako typové kontroly (@.string(), @.number(), @.boolean()) a navigaci k rodiči (^).
Příznak preventEval: true je vždy nastaven, takže filtrační predikáty běží přes bezpečný interpret místo vestavěného JavaScript eval(). Vložený dotaz nemůže spustit libovolný kód proti této stránce.
Mohu kopírovat jednotlivé odpovídající hodnoty?
Ano. Tlačítko Kopírovat do schránky kopíruje celý blok výsledků jako JSON pole. Pro získání jedné hodnoty přepněte výstupní režim na Hodnoty, pak vyberte požadovaný řádek v textovém poli výsledku a použijte běžnou zkratku pro kopírování (Ctrl/Cmd + C).
Výstup je prostý JSON text, takže se čistě vloží do editoru kódu, terminálu, Postman testu nebo Slack zprávy.