Utilia

JSONPath testuotojas

Išbandyk JSONPath išraiškas su savo JSON naršyklėje. Filtrai, iškarpos, rekursinis nusileidimas, keliai ir JSON Pointer su paruoštais pavyzdžiais.

Kaip išbandyti JSONPath išraišką

  1. Įklijuok savo JSON į JSON duomenys arba spustelėk Įkelti pavyzdinius duomenis, kad naudotum klasikinį knygyno pavyzdį.
  2. Įrašyk išraišką į JSONPath išraiška arba pasirink ją iš Pavyzdžiai.
  3. Rezultatas atsinaujina tau rašant; Vykdyti užklausą paleidžia iš naujo. Būsenos eilutė nurodo atitikmenų skaičių.
  4. Su Rodyti perjunk Reikšmes, Kelius, JSON Pointer ir Kelius ir reikšmes, tada nukopijuok rezultatą.

JSONPath sintaksė trumpai

Sintaksė Reikšmė Pavyzdys
$ dokumento šaknis $
.name arba ['name'] vaikas $.store.bicycle
* kiekvienas vaikas $.store.*
.. rekursinis nusileidimas, bet kokiame gylyje $..author
[n] masyvo indeksas, nuo 0 $..book[2]
[start:end:step] iškarpa; neigiami skaičiai skaičiuojami nuo galo $..book[-1:]
[a,b] sąjunga $..book[0,1]
[?(expr)] filtras $..book[?(@.price < 10)]
^ kiekvieno atitikmens tėvas $..book[?(@.price > 20)]^
~ savybės pavadinimas vietoj reikšmės $.store.*~

Rezultatai grąžinami dokumento tvarka. Kelius pateikia normalizuotus kelius, pavyzdžiui, $['store']['book'][0]['title'], o JSON Pointer – RFC 6901 formą /store/book/0/title, patogią JSON Patch ar JSON Schema tikrintuvų klaidų keliams.

Filtrų išraiškos: kas palaikoma

Filtrai vertinami su jsonpath-plus saugiuoju režimu: išraišką išanalizuoja ir interpretuoja nedidelis vertintojas, ji niekada nepaduodama į eval ar new Function. Viduje [?( … )] gali naudoti:

  • @ dabartiniam elementui, @.field ir @['field'] jo nariams, @root visam dokumentui ($ filtre neprieinamas);
  • palyginimus ==, !=, ===, !==, <, <=, >, >=;
  • logiką &&, ||, !, aritmetiką + - * / % ir trinarį operatorių a ? b : c;
  • eilutės, skaičiaus, true, false, null ir reguliariųjų reiškinių literalus;
  • pačių reikšmių metodus, pavyzdžiui, @.title.startsWith('S'), @.tags.includes('new') ar @.title.match(/lord/i);
  • @property (dabartinio elemento raktą ar indeksą), @parent ir @path (jo normalizuotą kelią) jsonpath-plus stiliumi.

Prieiga prie constructor, __proto__ ir Function konstruktoriaus užblokuota. Jei filtras nepavyksta vienam elementui, pavyzdžiui, @.isbn.startsWith('0') knygai be isbn, tas elementas tiesiog neatitinka; sintaksės klaida išraiškoje pranešama. Filtrai, užrašyti RFC 9535 būdu, [?@.price < 10] be skliaustų, priimami ir skaitomi kaip [?(@.price < 10)]. RFC 9535 funkcijos, tokios kaip length(), count(), match() ir search(), neprieinamos: vietoj jų naudok JavaScript metodus, pavyzdžiui, @.name.length.

Tipų parinkikliai iš jsonpath-plus taip pat veikia kelio gale: $..*@number() grąžina kiekvieną skaičių, o @string(), @boolean(), @array(), @object(), @null() ir @integer() tą patį daro kitiems tipams.

Dažnai užduodami klausimai

Ar mano JSON siunčiamas į serverį?

Ne. Analizė ir vertinimas vyksta tavo naršyklėje, o duomenys niekada nepalieka tavo kompiuterio.

Kodėl mano filtras nieko negrąžina?

Patikrink, ar kelias prieš filtrą parenka masyvą ar objektą: $.store.book[?(@.price < 10)] filtruoja knygas, o $.store[?(@.price < 10)] žiūri į book ir bicycle. Elemente nesanti savybė yra undefined, todėl palyginimai su ja yra klaidingi.

Kuo skiriasi `==` ir `===`?

Kaip JavaScript, == konvertuoja tipus ("10" == 10 yra teisinga), o === lygina tipą ir reikšmę.

Kodėl išvestis ribojama?

Į rezultatą įrašoma tik pirmieji 10 000 atitikmenų, kad puslapis išliktų greitas; būsenos eilutė nurodo visą skaičių.

Ar JSONPath standartizuotas?

Taip, nuo 2024 m., pagal RFC 9535. Realizacijos vis dar skiriasi, ypač filtruose; šis įrankis laikosi jsonpath-plus – Stefano Goessnerio originalaus JSONPath sintaksės.