Utilia

Testuesi i JSONPath

Testo shprehje JSONPath mbi JSON-in tënd në shfletues. Filtra, prerje, zbritje rekursive, shtigje dhe JSON Pointers, me shembuj të gatshëm.

Si ta testosh një shprehje JSONPath

  1. Ngjit JSON-in tënd te Të dhënat JSON, ose kliko Ngarko të dhëna shembull për të përdorur shembullin klasik të librarisë.
  2. Shkruaj një shprehje te Shprehja JSONPath, ose zgjidh një nga Shembuj.
  3. Rezultati përditësohet ndërsa shkruan; Ekzekuto kërkimin e ekzekuton përsëri. Rreshti i gjendjes jep numrin e përputhjeve.
  4. Përdor Shfaq për të kaluar mes Vlerat, Shtigjet, JSON Pointers dhe Shtigjet dhe vlerat, pastaj kopjo rezultatin.

Sintaksa e JSONPath shkurtimisht

Sintaksa Kuptimi Shembull
$ rrënja e dokumentit $
.name ose ['name'] një fëmijë $.store.bicycle
* çdo fëmijë $.store.*
.. zbritje rekursive, në çdo thellësi $..author
[n] indeksi i vargut, nga 0 $..book[2]
[start:end:step] prerje; numrat negativë numërojnë nga fundi $..book[-1:]
[a,b] bashkim $..book[0,1]
[?(expr)] filtër $..book[?(@.price < 10)]
^ prindi i secilës përputhje $..book[?(@.price > 20)]^
~ emri i vetisë në vend të vlerës $.store.*~

Rezultatet kthehen sipas radhës së dokumentit. Shtigjet jep shtigje të normalizuara si $['store']['book'][0]['title'], dhe JSON Pointers jep formën RFC 6901 /store/book/0/title, të dobishme për JSON Patch ose për shtigjet e gabimeve të vlerësuesve të JSON Schema.

Shprehjet e filtrit: çfarë mbështetet

Filtrat vlerësohen me jsonpath-plus në modalitet të sigurt: shprehja analizohet dhe interpretohet nga një vlerësues i vogël, nuk i kalohet kurrë eval ose new Function. Brenda [?( … )] mund të përdorësh:

  • @ për elementin aktual, @.field dhe @['field'] për anëtarët e tij, @root për të gjithë dokumentin ($ nuk është i disponueshëm brenda një filtri);
  • krahasimet ==, !=, ===, !==, <, <=, >, >=;
  • logjikën &&, ||, !, aritmetikën + - * / % dhe ternarin a ? b : c;
  • literale vargje, numra, true, false, null dhe shprehje të rregullta;
  • metodat e vetë vlerave, për shembull @.title.startsWith('S'), @.tags.includes('new') ose @.title.match(/lord/i);
  • @property (çelësi ose indeksi i elementit aktual), @parent dhe @path (shtegu i tij i normalizuar), në stilin e jsonpath-plus.

Qasja te constructor, __proto__ dhe konstruktori Function është e bllokuar. Nëse një filtër dështon në një element, për shembull @.isbn.startsWith('0') në një libër pa isbn, ai element thjesht nuk përputhet; një gabim sintakse në shprehje raportohet. Filtrat e shkruar sipas RFC 9535, [?@.price < 10] pa kllapa, pranohen dhe lexohen si [?(@.price < 10)]. Funksionet e RFC 9535 si length(), count(), match() dhe search() nuk janë të disponueshme: përdor në vend të tyre metoda JavaScript si @.name.length.

Përzgjedhësit e tipit të jsonpath-plus funksionojnë edhe në fund të një shtegu: $..*@number() kthen çdo numër, dhe @string(), @boolean(), @array(), @object(), @null() dhe @integer() bëjnë të njëjtën gjë për tipe të tjera.

Pyetje të shpeshta

A dërgohet JSON-i im te një server?

Jo. Analizimi dhe vlerësimi bëhen në shfletuesin tënd, dhe të dhënat e tua nuk largohen kurrë nga kompjuteri yt.

Pse filtri im nuk kthen asgjë?

Kontrollo që shtegu para filtrit përzgjedh një varg ose objekt: $.store.book[?(@.price < 10)] filtron librat, ndërsa $.store[?(@.price < 10)] shikon book dhe bicycle. Një veti që mungon në një element është undefined, ndaj krahasimet me të janë false.

Cili është ndryshimi mes `==` dhe `===`?

Si në JavaScript, == konverton tipet ("10" == 10 është true) ndërsa === krahason tipin dhe vlerën.

Pse dalja është e kufizuar?

Në rezultat shkruhen vetëm 10 000 përputhjet e para, që faqja të mbetet e përgjegjshme; rreshti i gjendjes jep numrin e plotë.

A është JSONPath i standardizuar?

Po, që nga viti 2024, nga RFC 9535. Zbatimet ende ndryshojnë, sidomos te filtrat; ky mjet ndjek jsonpath-plus, sintaksën e JSONPath-it origjinal të Stefan Goessner.