Utilia

Preizkuševalnik JSONPath

Preizkusi izraze JSONPath na svojem JSON v brskalniku. Filtri, rezine, rekurzivni spust, poti in kazalci JSON Pointer ter pripravljeni primeri.

Kako preizkusiti izraz JSONPath

  1. Prilepi svoj JSON v Podatki JSON ali klikni Naloži vzorčne podatke, da uporabiš klasični primer knjigarne.
  2. Vnesi izraz v Izraz JSONPath ali izberi enega iz Primeri.
  3. Rezultat se posodablja med tipkanjem; Zaženi poizvedbo ga zažene znova. Vrstica stanja prikaže število zadetkov.
  4. S Prikaži preklapljaš med Vrednosti, Poti, Kazalci JSON Pointer in Poti in vrednosti, nato rezultat kopiraj.

Sintaksa JSONPath na kratko

Sintaksa Pomen Primer
$ koren dokumenta $
.name ali ['name'] podrejeni element $.store.bicycle
* vsak podrejeni element $.store.*
.. rekurzivni spust, na kateri koli globini $..author
[n] indeks tabele, od 0 $..book[2]
[start:end:step] rezina; negativna števila štejejo od konca $..book[-1:]
[a,b] unija $..book[0,1]
[?(expr)] filter $..book[?(@.price < 10)]
^ starš vsakega zadetka $..book[?(@.price > 20)]^
~ ime lastnosti namesto vrednosti $.store.*~

Rezultati se vrnejo v vrstnem redu dokumenta. Poti da normalizirane poti, kot je $['store']['book'][0]['title'], Kazalci JSON Pointer pa obliko RFC 6901 /store/book/0/title, uporabno za JSON Patch ali za poti napak preverjevalnikov JSON Schema.

Filtrski izrazi: kaj je podprto

Filtri se ovrednotijo z jsonpath-plus v varnem načinu: izraz razčleni in interpretira majhen ovrednotivec, nikoli se ne poda eval ali new Function. Znotraj [?( … )] lahko uporabiš:

  • @ za trenutni element, @.field in @['field'] za njegove člane, @root za celoten dokument ($ znotraj filtra ni na voljo);
  • primerjave ==, !=, ===, !==, <, <=, >, >=;
  • logiko &&, ||, !, aritmetiko + - * / % in ternarni operator a ? b : c;
  • literale nizov, števil, true, false, null in regularnih izrazov;
  • metode samih vrednosti, na primer @.title.startsWith('S'), @.tags.includes('new') ali @.title.match(/lord/i);
  • @property (ključ ali indeks trenutnega elementa), @parent in @path (njegova normalizirana pot) v slogu jsonpath-plus.

Dostop do constructor, __proto__ in konstruktorja Function je blokiran. Če filter pri enem elementu odpove, na primer @.isbn.startsWith('0') pri knjigi brez isbn, se ta element preprosto ne ujema; sintaksna napaka v izrazu je javljena. Filtri, napisani po RFC 9535, [?@.price < 10] brez oklepajev, so sprejeti in prebrani kot [?(@.price < 10)]. Funkcije RFC 9535, kot so length(), count(), match() in search(), niso na voljo: namesto tega uporabi metode JavaScript, kot je @.name.length.

Izbirniki tipov iz jsonpath-plus delujejo tudi na koncu poti: $..*@number() vrne vsa števila, @string(), @boolean(), @array(), @object(), @null() in @integer() pa delajo enako za druge tipe.

Pogosta vprašanja

Ali se moj JSON pošlje na strežnik?

Ne. Razčlenjevanje in ovrednotenje potekata v tvojem brskalniku, tvoji podatki pa nikoli ne zapustijo tvojega računalnika.

Zakaj moj filter ne vrne ničesar?

Preveri, ali pot pred filtrom izbere tabelo ali objekt: $.store.book[?(@.price < 10)] filtrira knjige, $.store[?(@.price < 10)] pa pogleda book in bicycle. Lastnost, ki je pri elementu ni, je undefined, zato so primerjave z njo napačne.

Kakšna je razlika med `==` in `===`?

Kot v JavaScriptu == pretvarja tipe ("10" == 10 je res), === pa primerja tip in vrednost.

Zakaj je izhod omejen?

V rezultat se zapiše samo prvih 10 000 zadetkov, da stran ostane odzivna; vrstica stanja pove celotno število.

Ali je JSONPath standardiziran?

Da, od leta 2024 z RFC 9535. Izvedbe se še vedno razlikujejo, zlasti pri filtrih; to orodje sledi jsonpath-plus, sintaksi izvirnega JSONPath Stefana Goessnerja.