Utilia

JSONPathi testija

Testi JSONPath-avaldisi oma JSON-il brauseris. Filtrid, lõigud, rekursiivne laskumine, teed ja JSON Pointerid koos valmis näidetega.

Kuidas JSONPath-avaldist testida

  1. Kleebi oma JSON väljale JSON-andmed või klõpsa Laadi näidisandmed, et kasutada klassikalist raamatupoe näidet.
  2. Kirjuta avaldis väljale JSONPath-avaldis või vali see jaotisest Näited.
  3. Tulemus uueneb kirjutamise ajal; Käivita päring käivitab selle uuesti. Olekurida annab vastete arvu.
  4. Kasuta valikut Näita, et vahetada Väärtused, Teed, JSON Pointerid ja Teed ja väärtused vahel, seejärel kopeeri tulemus.

JSONPathi süntaks lühidalt

Süntaks Tähendus Näide
$ dokumendi juur $
.name või ['name'] alamelement $.store.bicycle
* iga alamelement $.store.*
.. rekursiivne laskumine mis tahes sügavusel $..author
[n] massiivi indeks alates 0-st $..book[2]
[start:end:step] lõik; negatiivsed arvud loevad lõpust $..book[-1:]
[a,b] ühend $..book[0,1]
[?(expr)] filter $..book[?(@.price < 10)]
^ iga vaste vanem $..book[?(@.price > 20)]^
~ väärtuse asemel omaduse nimi $.store.*~

Tulemused tagastatakse dokumendi järjekorras. Teed annab normaliseeritud teed nagu $['store']['book'][0]['title'] ja JSON Pointerid annab RFC 6901 kuju /store/book/0/title, mis on käepärane JSON Patchi või JSON Schema valideerijate veateede jaoks.

Filtriavaldised: mida toetatakse

Filtreid hinnatakse jsonpath-plusiga turvarežiimis: avaldise parsib ja tõlgendab väike hindaja, seda ei anta kunagi eval-ile ega new Function-ile. Sees [?( … )] saad kasutada:

  • @ praeguse elemendi jaoks, @.field ja @['field'] selle liikmete jaoks, @root kogu dokumendi jaoks ($ ei ole filtri sees saadaval);
  • võrdlusi ==, !=, ===, !==, <, <=, >, >=;
  • loogikat &&, ||, !, aritmeetikat + - * / % ja kolmekohalist operaatorit a ? b : c;
  • stringi, arvu, true, false, null ja regulaaravaldise literaale;
  • väärtuste enda meetodeid, näiteks @.title.startsWith('S'), @.tags.includes('new') või @.title.match(/lord/i);
  • @property (praeguse elemendi võti või indeks), @parent ja @path (selle normaliseeritud tee) jsonpath-plusi stiilis.

Juurdepääs constructor, __proto__ ja Function konstruktorile on blokeeritud. Kui filter ebaõnnestub ühel elemendil, näiteks @.isbn.startsWith('0') raamatul ilma isbn-ita, siis see element lihtsalt ei sobi; avaldise süntaksiviga teatatakse. RFC 9535 viisil kirjutatud filtrid, [?@.price < 10] ilma sulgudeta, aktsepteeritakse ja loetakse kujul [?(@.price < 10)]. RFC 9535 funktsioonid nagu length(), count(), match() ja search() ei ole saadaval: kasuta selle asemel JavaScripti meetodeid, näiteks @.name.length.

Jsonpath-plusi tüübivalijad töötavad ka tee lõpus: $..*@number() tagastab iga arvu ning @string(), @boolean(), @array(), @object(), @null() ja @integer() teevad sama muude tüüpide jaoks.

Korduma kippuvad küsimused

Kas minu JSON saadetakse serverisse?

Ei. Analüüs ja hindamine toimuvad sinu brauseris ning sinu andmed ei lahku sinu arvutist.

Miks minu filter ei tagasta midagi?

Kontrolli, et tee enne filtrit valib massiivi või objekti: $.store.book[?(@.price < 10)] filtreerib raamatuid, samal ajal kui $.store[?(@.price < 10)] vaatab book ja bicycle elemente. Elemendil puuduv omadus on undefined, seega on selle võrdlused väära tulemusega.

Mis vahe on `==` ja `===` vahel?

Nagu JavaScriptis, teisendab == tüüpe ("10" == 10 on tõene), samal ajal kui === võrdleb tüüpi ja väärtust.

Miks on väljund piiratud?

Tulemusse kirjutatakse ainult esimesed 10 000 vastet, et leht püsiks reageeriv; olekurida annab täieliku arvu.

Kas JSONPath on standardiseeritud?

Jah, alates 2024. aastast RFC 9535 näol. Teostused erinevad siiski, eriti filtrites; see tööriist järgib jsonpath-plusi, Stefan Goessneri algse JSONPathi süntaksit.