Utilia

JSONPath tester

Testiraj JSONPath izraze na vlastitom JSON-u u pregledniku. Filtri, isječci, rekurzivni spust, putanje i JSON Pointeri, uz gotove primjere.

Kako testirati JSONPath izraz

  1. Zalijepi svoj JSON u JSON podaci ili klikni Učitaj probne podatke da koristiš klasičan primjer knjižare.
  2. Upiši izraz u JSONPath izraz ili odaberi jedan iz Primjeri.
  3. Rezultat se osvježava dok tipkaš; Pokreni upit ga pokreće ponovno. Statusni redak daje broj podudaranja.
  4. Pomoću Prikaži prebacuj se između Vrijednosti, Putanje, JSON Pointeri i Putanje i vrijednosti, zatim kopiraj rezultat.

JSONPath sintaksa ukratko

Sintaksa Značenje Primjer
$ korijen dokumenta $
.name ili ['name'] podređeni element $.store.bicycle
* svaki podređeni element $.store.*
.. rekurzivni spust, na bilo kojoj dubini $..author
[n] indeks polja, od 0 $..book[2]
[start:end:step] isječak; negativni brojevi broje od kraja $..book[-1:]
[a,b] unija $..book[0,1]
[?(expr)] filtar $..book[?(@.price < 10)]
^ roditelj svakog podudaranja $..book[?(@.price > 20)]^
~ naziv svojstva umjesto vrijednosti $.store.*~

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

Izrazi filtara: što je podržano

Filtri se izračunavaju pomoću jsonpath-plus u sigurnom načinu: izraz analizira i tumači mali evaluator, nikada se ne prosljeđuje funkciji eval ili new Function. Unutar [?( … )] možeš koristiti:

  • @ za trenutnu stavku, @.field i @['field'] za njezine članove, @root za cijeli dokument ($ nije dostupan unutar filtra);
  • usporedbe ==, !=, ===, !==, <, <=, >, >=;
  • logiku &&, ||, !, aritmetiku + - * / % i ternarni operator a ? b : c;
  • literale nizova, brojeva, true, false, null i regularnih izraza;
  • metode samih vrijednosti, na primjer @.title.startsWith('S'), @.tags.includes('new') ili @.title.match(/lord/i);
  • @property (ključ ili indeks trenutne stavke), @parent i @path (njezina normalizirana putanja), u stilu jsonpath-plusa.

Pristup constructor, __proto__ i konstruktoru Function je blokiran. Ako filtar zakaže na jednoj stavci, na primjer @.isbn.startsWith('0') na knjizi bez isbn, ta se stavka jednostavno ne podudara; sintaksna greška u izrazu se prijavljuje. Filtri napisani prema RFC-u 9535, [?@.price < 10] bez zagrada, prihvaćaju se i čitaju kao [?(@.price < 10)]. Funkcije iz RFC-a 9535 poput length(), count(), match() i search() nisu dostupne: umjesto njih koristi JavaScript metode poput @.name.length.

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

Česta pitanja

Šalje li se moj JSON na poslužitelj?

Ne. Analiza i izračun odvijaju se u tvom pregledniku, a tvoji podaci nikada ne napuštaju tvoje računalo.

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

Provjeri bira li putanja prije filtra polje ili objekt: $.store.book[?(@.price < 10)] filtrira knjige, dok $.store[?(@.price < 10)] gleda book i bicycle. Svojstvo koje nedostaje u stavci je undefined, pa su usporedbe s njim netočne.

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

Kao u JavaScriptu, == pretvara tipove ("10" == 10 je istina), dok === uspoređuje tip i vrijednost.

Zašto je izlaz ograničen?

U rezultat se upisuje samo prvih 10 000 podudaranja kako bi stranica ostala responzivna; statusni redak daje puni broj.

Je li JSONPath standardiziran?

Da, od 2024. godine, RFC-om 9535. Implementacije se i dalje razlikuju, osobito u filtrima; ovaj alat slijedi jsonpath-plus, sintaksu izvornog JSONPatha Stefana Goessnera.