Utilia

JSONPath-test

Test JSONPath-udtryk på din egen JSON i browseren. Filtre, udsnit, rekursiv nedstigning, stier og JSON Pointers, med færdige eksempler.

Sådan tester du et JSONPath-udtryk

  1. Indsæt din JSON i JSON-data, eller klik på Indlæs eksempeldata for at bruge det klassiske eksempel med en boghandel.
  2. Skriv et udtryk i JSONPath-udtryk, eller vælg et under Eksempler.
  3. Resultatet opdateres, mens du skriver. Kør forespørgsel kører det igen. Statuslinjen angiver antallet af match.
  4. Brug Vis til at skifte mellem Værdier, Stier, JSON Pointers og Stier og værdier, og kopiér derefter resultatet.

JSONPath-syntaks i korte træk

Syntaks Betydning Eksempel
$ dokumentets rod $
.name eller ['name'] et underordnet element $.store.bicycle
* alle underordnede elementer $.store.*
.. rekursiv nedstigning, på ethvert niveau $..author
[n] listeindeks, fra 0 $..book[2]
[start:end:step] udsnit. Negative tal tæller fra slutningen $..book[-1:]
[a,b] union $..book[0,1]
[?(expr)] filter $..book[?(@.price < 10)]
^ forælderen til hvert match $..book[?(@.price > 20)]^
~ egenskabsnavnet i stedet for værdien $.store.*~

Resultaterne returneres i dokumentets rækkefølge. Stier giver normaliserede stier som $['store']['book'][0]['title'], og JSON Pointers giver RFC 6901-formen /store/book/0/title, som er praktisk til JSON Patch eller til fejlstierne fra JSON Schema-validatorer.

Filterudtryk: hvad der understøttes

Filtre evalueres med jsonpath-plus i sikker tilstand: Udtrykket parses og fortolkes af en lille evaluator og sendes aldrig til eval eller new Function. Inde i [?( … )] kan du bruge:

  • @ for det aktuelle element, @.field og @['field'] for dets medlemmer og @root for hele dokumentet ($ er ikke tilgængelig inde i et filter);
  • sammenligninger ==, !=, ===, !==, <, <=, >, >=;
  • logik &&, ||, !, regning + - * / % og den betingede operator a ? b : c;
  • literaler for strenge, tal, true, false, null og regulære udtryk;
  • værdiernes egne metoder, for eksempel @.title.startsWith('S'), @.tags.includes('new') eller @.title.match(/lord/i);
  • @property (det aktuelle elements nøgle eller indeks), @parent og @path (dets normaliserede sti) i jsonpath-plus-stil.

Adgang til constructor, __proto__ og Function-konstruktøren er blokeret. Hvis et filter fejler på ét element, for eksempel @.isbn.startsWith('0') på en bog uden isbn, passer det element simpelthen ikke. En syntaksfejl i udtrykket meldes. Filtre skrevet på RFC 9535-måden, [?@.price < 10] uden parenteser, accepteres og læses som [?(@.price < 10)]. RFC 9535-funktioner som length(), count(), match() og search() er ikke tilgængelige: Brug i stedet JavaScript-metoder som @.name.length.

Typevælgere fra jsonpath-plus virker også sidst i en sti: $..*@number() returnerer alle tal, og @string(), @boolean(), @array(), @object(), @null() og @integer() gør det samme for andre typer. Husk, at tal i udtryk og JSON skrives med punktum som decimaltegn (8.95).

Ofte stillede spørgsmål

Bliver min JSON sendt til en server?

Nej. Parsing og evaluering sker i din browser, og dine data forlader aldrig din computer.

Hvorfor giver mit filter ingenting?

Tjek, at stien før filteret vælger en liste eller et objekt: $.store.book[?(@.price < 10)] filtrerer bøgerne, mens $.store[?(@.price < 10)] ser på book og bicycle. En egenskab, der mangler på et element, er undefined, så sammenligninger med den er falske.

Hvad er forskellen på `==` og `===`?

Som i JavaScript konverterer == typer ("10" == 10 er sandt), mens === sammenligner type og værdi.

Hvorfor er resultatet begrænset?

Kun de første 10.000 match skrives i resultatet, så siden forbliver responsiv. Statuslinjen angiver det fulde antal.

Er JSONPath standardiseret?

Ja, siden 2024 med RFC 9535. Implementeringerne er stadig forskellige, især i filtre. Dette værktøj følger jsonpath-plus, syntaksen i Stefan Goessners oprindelige JSONPath.