Utilia

JSONPath teszter

Teszteld a JSONPath-kifejezéseket a saját JSON-odon a böngészőben. Szűrők, szeletek, rekurzív bejárás, útvonalak és JSON Pointerek, kész példákkal.

Hogyan teszteld a JSONPath-kifejezést

  1. Illeszd be a JSON-t a JSON-adatok mezőbe, vagy kattints a Mintaadatok betöltése gombra a klasszikus könyvesbolt-példa használatához.
  2. Írj be egy kifejezést a JSONPath-kifejezés mezőbe, vagy válassz egyet a Példák közül.
  3. Az eredmény gépelés közben frissül; a Lekérdezés futtatása gomb újra lefuttatja. Az állapotsor megadja a találatok számát.
  4. A Megjelenítés beállítással válthatsz az Értékek, az Útvonalak, a JSON Pointerek és az Útvonalak és értékek között, majd másold ki az eredményt.

A JSONPath szintaxisa dióhéjban

Szintaxis Jelentés Példa
$ a dokumentum gyökere $
.name vagy ['name'] egy gyermek $.store.bicycle
* minden gyermek $.store.*
.. rekurzív bejárás, bármilyen mélységben $..author
[n] tömbindex, 0-tól $..book[2]
[start:end:step] szelet; a negatív számok a végétől számolnak $..book[-1:]
[a,b] unió $..book[0,1]
[?(expr)] szűrő $..book[?(@.price < 10)]
^ az egyes találatok szülője $..book[?(@.price > 20)]^
~ az érték helyett a tulajdonságnév $.store.*~

Az eredmények dokumentumsorrendben érkeznek. Az Útvonalak normalizált útvonalakat ad, például $['store']['book'][0]['title'], a JSON Pointerek pedig az RFC 6901 szerinti /store/book/0/title alakot, amely a JSON Patchhez vagy a JSON Schema validátorok hibaútvonalaihoz praktikus.

Szűrőkifejezések: mi támogatott

A szűrőket a jsonpath-plus biztonságos módban értékeli ki: a kifejezést egy kis kiértékelő elemzi és értelmezi, soha nem adja át az eval vagy a new Function függvénynek. A [?( … )] belsejében használhatod:

  • az @ jelet az aktuális elemre, az @.field és @['field'] alakot a tagjaira, az @root jelet a teljes dokumentumra (a $ nem érhető el a szűrőn belül);
  • az ==, !=, ===, !==, <, <=, >, >= összehasonlításokat;
  • az &&, ||, ! logikát, a + - * / % aritmetikát és a háromoperandusú a ? b : c kifejezést;
  • karakterlánc-, szám-, true, false, null és reguláris kifejezés literálokat;
  • magának az értéknek a metódusait, például @.title.startsWith('S'), @.tags.includes('new') vagy @.title.match(/lord/i);
  • az @property (az aktuális elem kulcsa vagy indexe), az @parent és az @path (a normalizált útvonala) jelölést, jsonpath-plus stílusban.

A constructor, a __proto__ és a Function konstruktor elérése tiltott. Ha egy szűrő egy elemnél hibázik, például az @.isbn.startsWith('0') egy isbn nélküli könyvnél, az az elem egyszerűen nem egyezik; a kifejezés szintaktikai hibáját az eszköz jelzi. Az RFC 9535 szerinti szűrőket, a [?@.price < 10] alakot zárójelek nélkül, elfogadja, és [?(@.price < 10)] alakban olvassa be. Az RFC 9535 függvényei, mint a length(), count(), match() és search(), nem érhetők el: használj helyette JavaScript-metódusokat, például az @.name.length kifejezést.

A jsonpath-plus típusválasztói az útvonal végén is működnek: a $..*@number() minden számot visszaad, az @string(), @boolean(), @array(), @object(), @null() és @integer() pedig a többi típusra teszi ugyanezt.

Gyakori kérdések

Elküldésre kerül a JSON-om egy szervernek?

Nem. Az elemzés és a kiértékelés a böngésződben történik, az adataid soha nem hagyják el a számítógépedet.

Miért nem ad vissza semmit a szűrőm?

Ellenőrizd, hogy a szűrő előtti útvonal tömböt vagy objektumot választ-e ki: a $.store.book[?(@.price < 10)] a könyveket szűri, a $.store[?(@.price < 10)] viszont a book és a bicycle elemet nézi. Az elemből hiányzó tulajdonság undefined, ezért az összehasonlítások vele hamisak.

Mi a különbség az `==` és a `===` között?

Ahogy a JavaScriptben, az == típust konvertál (a "10" == 10 igaz), a === pedig a típust és az értéket is összehasonlítja.

Miért korlátozott a kimenet?

Az eredménybe csak az első 10 000 találat kerül, hogy az oldal reszponzív maradjon; az állapotsor megadja a teljes számot.

Szabványosított a JSONPath?

Igen, 2024 óta az RFC 9535 által. A megvalósítások még mindig eltérnek, főként a szűrőknél; ez az eszköz a jsonpath-plus-t követi, Stefan Goessner eredeti JSONPath szintaxisát.