Utilia

Tester výrazov JSONPath

Otestuj výrazy JSONPath na vlastnom JSON v prehliadači. Filtre, výseky, rekurzívne prehľadávanie, cesty a JSON Pointery, s hotovými príkladmi.

Ako otestovať výraz JSONPath

  1. Vlož svoj JSON do Údaje JSON, alebo klikni na Načítať vzorové údaje a použi klasický príklad kníhkupectva.
  2. Napíš výraz do Výraz JSONPath, alebo ho vyber z Príklady.
  3. Výsledok sa mení počas písania; Spustiť dopyt ho spustí znova. Stavový riadok uvádza počet zhôd.
  4. V Zobraziť prepínaj medzi Hodnoty, Cesty, JSON Pointery a Cesty a hodnoty a potom výsledok skopíruj.

Syntax JSONPath v skratke

Syntax Význam Príklad
$ koreň dokumentu $
.name alebo ['name'] potomok $.store.bicycle
* každý potomok $.store.*
.. rekurzívne prehľadávanie v ľubovoľnej hĺbke $..author
[n] index poľa od 0 $..book[2]
[start:end:step] výsek; záporné čísla sa počítajú od konca $..book[-1:]
[a,b] zjednotenie $..book[0,1]
[?(expr)] filter $..book[?(@.price < 10)]
^ rodič každej zhody $..book[?(@.price > 20)]^
~ názov vlastnosti namiesto hodnoty $.store.*~

Výsledky sa vracajú v poradí dokumentu. Cesty dávajú normalizované cesty, napríklad $['store']['book'][0]['title'], a JSON Pointery tvar podľa RFC 6901 /store/book/0/title, vhodný pre JSON Patch alebo pre cesty chýb validátorov JSON Schema.

Filtračné výrazy: čo je podporované

Filtre sa vyhodnocujú pomocou jsonpath-plus v bezpečnom režime: výraz parsuje a interpretuje malý vyhodnocovač, nikdy sa nepredáva do eval ani new Function. Vo vnútri [?( … )] môžeš použiť:

  • @ pre aktuálnu položku, @.field a @['field'] pre jej členy, @root pre celý dokument ($ vo filtri nie je dostupné);
  • porovnania ==, !=, ===, !==, <, <=, >, >=;
  • logiku &&, ||, !, aritmetiku + - * / % a ternárny operátor a ? b : c;
  • literály reťazcov, čísel, true, false, null a regulárnych výrazov;
  • metódy samotných hodnôt, napríklad @.title.startsWith('S'), @.tags.includes('new') alebo @.title.match(/lord/i);
  • @property (kľúč alebo index aktuálnej položky), @parent a @path (jej normalizovaná cesta) v štýle jsonpath-plus.

Prístup ku constructor, __proto__ a konštruktoru Function je zablokovaný. Ak filter zlyhá na jednej položke, napríklad @.isbn.startsWith('0') pri knihe bez isbn, táto položka jednoducho nezodpovedá; syntaktická chyba vo výraze sa nahlási. Filtre zapísané podľa RFC 9535, [?@.price < 10] bez zátvoriek, sa akceptujú a čítajú sa ako [?(@.price < 10)]. Funkcie RFC 9535 ako length(), count(), match() a search() nie sú dostupné: namiesto nich použi metódy JavaScriptu, napríklad @.name.length.

Výbery typov z jsonpath-plus fungujú aj na konci cesty: $..*@number() vráti každé číslo a @string(), @boolean(), @array(), @object(), @null() a @integer() robia to isté pre ostatné typy.

Často kladené otázky

Odosiela sa môj JSON na server?

Nie. Analýza aj vyhodnotenie prebiehajú v tvojom prehliadači a tvoje údaje nikdy neopustia tvoj počítač.

Prečo môj filter nič nevracia?

Skontroluj, či cesta pred filtrom vyberá pole alebo objekt: $.store.book[?(@.price < 10)] filtruje knihy, kým $.store[?(@.price < 10)] skúma book a bicycle. Vlastnosť, ktorá položke chýba, je undefined, takže porovnania s ňou sú nepravdivé.

Aký je rozdiel medzi `==` a `===`?

Ako v JavaScripte: == konvertuje typy ("10" == 10 je pravda), kým === porovnáva typ aj hodnotu.

Prečo je výstup obmedzený?

Do výsledku sa zapíše iba prvých 10 000 zhôd, aby stránka zostala responzívna; stavový riadok uvádza úplný počet.

Je JSONPath štandardizovaný?

Áno, od roku 2024 normou RFC 9535. Implementácie sa však stále líšia, najmä vo filtroch; tento nástroj sleduje jsonpath-plus, teda syntax pôvodného JSONPath od Stefana Goessnera.