Mi az a JSONPath?
A JSONPath egy lekérdező nyelv JSON dokumentumokhoz, a JSON megfelelője az XPath-nak az XML-hez. Stefan Goessner javasolta 2007-ben, mint egy rövid, olvasható módot egy csomópont megcélzására egy JSON fán belül anélkül, hogy elemzőt kellene írni. Egy kifejezés a gyökér kiválasztóval, $-sal kezdődik, és tulajdonság elérőket, tömb indexeket, helyettesítőket, rekurzív bejárást és szűrő feltételeket láncol össze, amíg ki nem választja a kívánt csomópontokat. 2024-ben az IETF kiadta az RFC 9535-öt a szintaxis szabványosítására, amely implementációnként eltérő volt; ez a tesztelő a jsonpath-plus-on fut, egy széles körben használt JavaScript implementáción, amely lefedi a Goessner tervezetet, az RFC 9535 nagy részét és néhány kiterjesztés operátort is.
Hogyan működik a JSONPath
Egy JSONPath kifejezés balról jobbra olvasandó, és egy JSON dokumentumot jár be lépésről lépésre. Minden lépés veszi az előző lépés által túlélt csomópontok halmazát, és tovább szűkíti azt. A teljes kiértékelési folyamat:
- Horgonyzás a gyökér kiválasztóval
$. Minden kifejezés itt kezdődik, a legfelső szintű értékre mutatva, függetlenül attól, hogy az egy objektum vagy egy tömb. A puszta tulajdonságnevek vezető$nélkül nem érvényes JSONPath-ek. - Belépés a gyermek tagokba pont jelöléssel (
$.store.book) vagy zárójel jelöléssel ($['store']['book']). A zárójel jelölés akkor szükséges, ha egy kulcs szóközt, kötőjelet vagy bármilyen olyan karaktert tartalmaz, amely nem érvényes azonosító. - Az összes szint egyidejű keresése a rekurzív bejárás operátorral
... A$..authorkifejezés összegyűjti az összesauthorértéket a fában bárhol, mélységtől függetlenül. Ez az az operátor, amellyel a JMESPath nem rendelkezik. - Tömb elemek kiválasztása index szerint (
[0],[-1]az utolsó elemhez a jsonpath-plus-ban), szeletelésük a[start:end]jelöléssel ([0:3]az első hármat adja vissza), vagy az összes elem lekérése a[*]helyettesítővel. - Elemek szűrése egy predikátummal
[?(...)]-en belül. A predikátumon belül a@az aktuális elemre hivatkozik, így a[?(@.price<10)]csak azokat az elemeket tartja meg, amelyekpricemezője kisebb, mint 10. A szűrők kombinálhatók az útvonal többi részével, így először szűrhet, majd leereszkedhet, vagy először leereszkedhet, majd szűrhet. - Válassza ki a kimeneti formátumot. Az Értékek visszaadja a találati adatokat. Az Útvonalak visszaadja az egyes találatok JSONPath-ját, hogy lássa, mit oldott fel a motor. A Pointerek visszaadja a megfelelő RFC 6901 JSON Pointer-t minden találathoz, hasznos, ha a downstream fogyasztó JSON Patch vagy JSON Schema érvényesítő.
Miért használja ezt a JSONPath tesztelőt?
- A JSON sosem hagyja el a böngészőt. A lekérdezés az oldalon belül fut, így a termelési teszadatok, az ügyfél PII és a kiadás előtti API-válaszok az Ön gépén maradnak.
- A motor a
jsonpath-plus9.x, ugyanaz a könyvtár, amely számos termelési tesztsvitet és CI állítást támogat. Az itt látott eredmények megegyeznek azzal, amit a build pipeline fog látni. - Három kimeneti mód fedi le a gyakori downstream fogyasztókat: nyers Értékek másoláshoz, Útvonalak a motor feloldásának hibakereséséhez és RFC 6901 Pointerek JSON Patch és JSON Schema munkafolyamatokhoz.
- A szűrő kifejezések
preventEval: truebeállítással futnak, így egy beillesztett lekérdezés nem hajthat végre tetszőleges JavaScript kódot a gazdaoldalon. Ez akkor fontos, ha a kifejezés egy Slack üzenetből, egy Jira ticketből vagy egy kolléga vágólapjáról származik.
A JSONPath gyakori alkalmazásai
A JSONPath bárhol felbukkan, ahol a kódnak ki kell húznia egy mezőt egy JSON adattartalomból anélkül, hogy kézzel kellene rekurzív bejárást írnia:
- Postman tesztek: a Postman Teszt fülén elérhető a
pm.response.json()a JSONPath-stílusú hozzáféréssel együtt állításokhoz. A csapatok egyetlen kifejezést írnak, mint például$.data.user.email, hogy kihúzzanak egy mezőt egy válaszból, és CI-ben állítsanak rá. - k6 terheléses tesztek: a k6 parancsfájlok a
jsonpath()-t hívják egycheck()blokkon belül, hogy értékeket nyerjenek ki a választörzsekből és SLA küszöböket állítsanak. Ugyanaz a kifejezés, amely egy szerződést igazolt a Postman-ben, egy terheléses tesztet is ellenőrizhet a k6 alatt. - JSON DSL adatátalakításokhoz: az AWS Step Functions JSONPath-t értékel ki az
InputPath,ResultPathésParametersmezőkben az esemény adattartalmak átalakításához állapotok között. Az Argo Workflows a JSONPath-t használja awithParam-ban feladatok tömbön történő kiterjesztéséhez. A Kuberneteskubectl -o jsonpathugyanazt a szintaxist használja mezők kinyeréséhez fürt objektumokból.
Kidolgozott példa
A kanonikus Goessner példa a könyvesbolt dokumentum négy könyvvel, mindegyik category, author, title és price mezőkkel. Ezzel a példával a $.store.book[?(@.price<10)].title kifejezés három lépésben fut. Először a $.store.book feloldódik a négy könyv tömbre. Ezután a [?(@.price<10)] szűrő csak azt az egy könyvet tartja meg, amelyik 10 alatt van árazva (a 8.95-ös bejegyzés). Végül a .title kinyeri a könyv címét. Az eredmény: ["Sayings of the Century"]. Az Útvonalak opcióra váltva ["$['store']['book'][0]['title']"] jelenik meg, a Pointerek opcióval pedig ["/store/book/0/title"].
Prototipizálja a kifejezéseit itt, majd illessze be őket közvetlenül a Postman-be, k6-ba, kubectl-be vagy egy Step Functions állapotgépbe. Illesszen be, kérdezzen, másoljon. Semmi sem kerül a hálózatra.
Mi az a JSONPath?
A JSONPath egy lekérdező nyelv JSON dokumentumokhoz, az XPath analógja az XML-hez. Stefan Goessner javasolta 2007-ben, és az IETF szabványosította RFC 9535 néven 2024-ben.
Egy tömör kifejezés szintaxist használ, amely $-sal (a dokumentum gyökér) kezdődik, és támogatja a pont jelölést, a tömb indexeket, a helyettesítőket, a szeleteket, a rekurzív bejárást (..) és a szűrő kifejezéseket ([?(...)]) a csomópontok kiválasztásához egy JSON fában.
Miben különbözik a JSONPath a JMESPath-től vagy a jq-tól?
Mindhárom JSON-t kérdez le, de nyelvtanuk és céljaik eltérőek. A JMESPath az AWS CLI / SDK szabvány: szigorúbb, mint a JSONPath, nincs rekurzív bejárás, kiszámítható mellékhatás-mentes projekciókra épült.
A jq egy Turing-teljes parancsfájl nyelv, amely nemcsak lekérdezi a JSON-t, hanem átalakítja, redukálja és adatfolyamként kezeli. A JSONPath a kettő között helyezkedik el: kifejezőbb, mint a JMESPath a rekurzív bejárásnak és a szűrőknek köszönhetően, könnyebb, mint a jq, és a legszélesebb körben támogatott szintaxis az általános célú tesztelő eszközökben (Postman, Playwright, REST Assured, kubectl, Step Functions). Ez a tesztelő a JSONPath-ot implementálja.
Melyik dialektust használja ez a tesztelő?
Ez a tesztelő a jsonpath-plus 9.x-et futtatja. Ez a könyvtár implementálja a Goessner 2007 specifikációt, lefedi az RFC 9535 nagy részét, és kiterjesztés operátorokat ad hozzá, mint például a típusellenőrzések (@.string(), @.number(), @.boolean()) és a szülő navigáció (^).
A preventEval: true flag mindig be van állítva, így a szűrő predikátumok egy biztonságos interpreteren keresztül futnak, nem a JavaScript eval() beépített függvényén keresztül. Egy beillesztett lekérdezés nem hajthat végre tetszőleges kódot ezen az oldalon.
Tudok egyedi egyeztetett értékeket másolni?
Igen. A Másolás a vágólapra gomb a teljes eredményblokkot másolja JSON tömbként. Ha egyetlen értéket szeretne kivenni, váltsa a kimeneti módot Értékek-re, majd válassza ki a kívánt sort az eredmény szövegmezőben, és használja a böngésző szokásos másolási parancsikonját (Ctrl/Cmd + C).
A kimenet egyszerű JSON szöveg, így tisztán beilleszthető egy kód szerkesztőbe, egy terminálba, egy Postman tesztbe vagy egy Slack üzenetbe.