Utilia

JSONPath-tester

Test JSONPath-uttrykk på din egen JSON i nettleseren. Filtre, utsnitt, rekursiv nedstigning, stier og JSON Pointers, med ferdige eksempler.

Slik tester du et JSONPath-uttrykk

  1. Lim inn JSON-en i JSON-data, eller klikk Last inn eksempeldata for å bruke det klassiske bokhandel-eksempelet.
  2. Skriv et uttrykk i JSONPath-uttrykk, eller velg et under Eksempler.
  3. Resultatet oppdateres mens du skriver, og Kjør spørring kjører det på nytt. Statuslinjen oppgir antall treff.
  4. Bruk Vis for å bytte mellom Verdier, Stier, JSON Pointers og Stier og verdier, og kopier deretter resultatet.

JSONPath-syntaks i et nøtteskall

Syntaks Betydning Eksempel
$ roten i dokumentet $
.name eller ['name'] et barn $.store.bicycle
* alle barn $.store.*
.. rekursiv nedstigning, på alle nivåer $..author
[n] listeindeks, fra 0 $..book[2]
[start:end:step] utsnitt, negative tall teller fra slutten $..book[-1:]
[a,b] union $..book[0,1]
[?(expr)] filter $..book[?(@.price < 10)]
^ forelderen til hvert treff $..book[?(@.price > 20)]^
~ egenskapsnavnet i stedet for verdien $.store.*~

Resultatene returneres i dokumentrekkefølge. Stier gir normaliserte stier som $['store']['book'][0]['title'], og JSON Pointers gir RFC 6901-formen /store/book/0/title, praktisk for JSON Patch eller for feilstiene fra JSON Schema-validatorer.

Filteruttrykk: hva som støttes

Filtre evalueres med jsonpath-plus i trygg modus: uttrykket tolkes av en liten evaluator og sendes aldri til eval eller new Function. Inne i [?( … )] kan du bruke:

  • @ for gjeldende element, @.field og @['field'] for medlemmene, og @root for hele dokumentet ($ er ikke tilgjengelig inne i et filter)
  • sammenligninger ==, !=, ===, !==, <, <=, >, >=
  • logikk &&, ||, !, aritmetikk + - * / % og den ternære operatoren a ? b : c
  • strenger, tall, true, false, null og regulære uttrykk som literaler
  • metoder på selve verdiene, for eksempel @.title.startsWith('S'), @.tags.includes('new') eller @.title.match(/lord/i)
  • @property (nøkkelen eller indeksen til gjeldende element), @parent og @path (den normaliserte stien), i jsonpath-plus-stil

Tilgang til constructor, __proto__ og Function-konstruktøren er blokkert. Hvis et filter feiler på ett element, for eksempel @.isbn.startsWith('0') på en bok uten isbn, matcher bare ikke det elementet. En syntaksfeil i uttrykket blir meldt. Filtre skrevet på RFC 9535-måten, [?@.price < 10] uten parenteser, godtas og leses som [?(@.price < 10)]. RFC 9535-funksjoner som length(), count(), match() og search() er ikke tilgjengelige: bruk JavaScript-metoder som @.name.length i stedet.

Typevelgere fra jsonpath-plus fungerer også på slutten av en sti: $..*@number() returnerer alle tall, og @string(), @boolean(), @array(), @object(), @null() og @integer() gjør det samme for andre typer.

Ofte stilte spørsmål

Sendes JSON-en min til en server?

Nei. Tolking og evaluering skjer i nettleseren din, og dataene dine forlater aldri datamaskinen din.

Hvorfor gir filteret mitt ingenting?

Sjekk at stien før filteret velger en liste eller et objekt: $.store.book[?(@.price < 10)] filtrerer bøkene, mens $.store[?(@.price < 10)] ser på book og bicycle. En egenskap som mangler på et element, er undefined, så sammenligninger med den er usanne.

Hva er forskjellen på `==` og `===`?

Som i JavaScript konverterer == typer ("10" == 10 er sant), mens === sammenligner både type og verdi.

Hvorfor er resultatet begrenset?

Bare de første 10 000 treffene skrives til resultatet, for at siden skal holde seg responsiv. Statuslinjen oppgir det fulle antallet.

Er JSONPath standardisert?

Ja, siden 2024, av RFC 9535. Implementasjonene er fortsatt ulike, særlig i filtre. Dette verktøyet følger jsonpath-plus, syntaksen i Stefan Goessners opprinnelige JSONPath.