Utilia

JSONPath tester

Testiraj JSONPath izraze na sopstvenom JSON-u u pregledaču. Filteri, isečci, rekurzivno spuštanje, putanje i JSON Pointeri, uz gotove primere.

Kako da testiraš JSONPath izraz

  1. Nalepi JSON u JSON podaci ili klikni Učitaj probne podatke da koristiš klasičan primer sa knjižarom.
  2. Upiši izraz u JSONPath izraz ili izaberi jedan iz Primeri.
  3. Rezultat se osvežava dok kucaš; Pokreni upit ga izvršava ponovo. Statusni red navodi broj poklapanja.
  4. Pomoću Prikaži prebacuješ između Vrednosti, Putanje, JSON Pointeri i Putanje i vrednosti, pa kopiraš rezultat.

JSONPath sintaksa ukratko

Sintaksa Značenje Primer
$ koren dokumenta $
.name ili ['name'] potomak $.store.bicycle
* svaki potomak $.store.*
.. rekurzivno spuštanje, na bilo kojoj dubini $..author
[n] indeks niza, od 0 $..book[2]
[start:end:step] isečak; negativni brojevi broje od kraja $..book[-1:]
[a,b] unija $..book[0,1]
[?(expr)] filter $..book[?(@.price < 10)]
^ roditelj svakog poklapanja $..book[?(@.price > 20)]^
~ naziv svojstva umesto vrednosti $.store.*~

Rezultati se vraćaju redosledom iz dokumenta. Putanje daje normalizovane putanje poput $['store']['book'][0]['title'], a JSON Pointeri daju oblik iz RFC 6901 /store/book/0/title, koristan za JSON Patch ili za putanje grešaka kod JSON Schema validatora.

Izrazi filtera: šta je podržano

Filteri se izračunavaju pomoću jsonpath-plus u bezbednom režimu: izraz parsira i tumači mali evaluator, a nikada se ne prosleđuje eval ni new Function. Unutar [?( … )] možeš da koristiš:

  • @ za trenutnu stavku, @.field i @['field'] za njene članove, @root za ceo dokument ($ nije dostupan unutar filtera);
  • poređenja ==, !=, ===, !==, <, <=, >, >=;
  • logiku &&, ||, !, aritmetiku + - * / % i ternarni operator a ? b : c;
  • literale stringova, brojeva, true, false, null i regularnih izraza;
  • metode samih vrednosti, na primer @.title.startsWith('S'), @.tags.includes('new') ili @.title.match(/lord/i);
  • @property (ključ ili indeks trenutne stavke), @parent i @path (njena normalizovana putanja), u jsonpath-plus stilu.

Pristup constructor, __proto__ i konstruktoru Function je blokiran. Ako filter ne uspe na jednoj stavci, na primer @.isbn.startsWith('0') na knjizi bez isbn, ta stavka se jednostavno ne poklapa; sintaksna greška u izrazu se prijavljuje. Filteri napisani na RFC 9535 način, [?@.price < 10] bez zagrada, prihvataju se i čitaju kao [?(@.price < 10)]. RFC 9535 funkcije poput length(), count(), match() i search() nisu dostupne: umesto njih koristi JavaScript metode poput @.name.length.

Selektori tipova iz jsonpath-plus takođe rade na kraju putanje: $..*@number() vraća svaki broj, a @string(), @boolean(), @array(), @object(), @null() i @integer() rade isto za druge tipove.

Česta pitanja

Da li se moj JSON šalje na server?

Ne. Parsiranje i izračunavanje odvijaju se u tvom pregledaču, a tvoji podaci nikada ne napuštaju računar.

Zašto moj filter ne vraća ništa?

Proveri da li putanja pre filtera bira niz ili objekat: $.store.book[?(@.price < 10)] filtrira knjige, dok $.store[?(@.price < 10)] gleda book i bicycle. Svojstvo koje nedostaje u stavci je undefined, pa su poređenja s njim netačna.

Koja je razlika između `==` i `===`?

Kao u JavaScriptu, == konvertuje tipove ("10" == 10 je tačno), dok === poredi tip i vrednost.

Zašto je izlaz ograničen?

U rezultat se upisuje samo prvih 10.000 poklapanja da stranica ostane brza; statusni red daje potpun broj.

Da li je JSONPath standardizovan?

Da, od 2024, kroz RFC 9535. Implementacije se i dalje razlikuju, naročito u filterima; ovaj alat sledi jsonpath-plus, sintaksu originalnog JSONPath-a Stefana Goessnera.