Teknobench

Ittestjar tal-JSONPath

Ittestja espressjonijiet JSONPath fuq il-JSON tiegħek stess fil-brawżer. Filtri, slices, nżul rikorsiv, paths u JSON Pointers, b’eżempji lesti.

Kif tittestja espressjoni JSONPath

  1. Waħħal il-JSON tiegħek f’Data JSON, jew ikklikkja Tella’ data tal-eżempju biex tuża l-eżempju klassiku tal-ħanut tal-kotba.
  2. Ikteb espressjoni f’Espressjoni JSONPath, jew agħżel waħda minn Eżempji.
  3. Ir-riżultat jiġi aġġornat waqt li tikteb; Wettaq il-mistoqsija iħaddimha mill-ġdid. Il-linja tal-istatus tagħti n-numru ta’ taqbilat.
  4. Uża Uri biex tbiddel bejn Valuri, Paths, JSON Pointers u Paths u valuri, imbagħad ikkopja r-riżultat.

Is-sintassi JSONPath fil-qosor

Sintassi Tifsira Eżempju
$ l-għerq tad-dokument $
.name jew ['name'] tifel $.store.bicycle
* kull tifel $.store.*
.. nżul rikorsiv, f’kull fond $..author
[n] indiċi tal-array, minn 0 $..book[2]
[start:end:step] slice; in-numri negattivi jgħoddu mill-aħħar $..book[-1:]
[a,b] unjoni $..book[0,1]
[?(expr)] filtru $..book[?(@.price < 10)]
^ il-ġenitur ta’ kull taqbila $..book[?(@.price > 20)]^
~ l-isem tal-proprjetà minflok il-valur $.store.*~

Ir-riżultati jiġu rritornati fl-ordni tad-dokument. Paths jagħti paths normalizzati bħal $['store']['book'][0]['title'], u JSON Pointers jagħti l-forma RFC 6901 /store/book/0/title, utli għal JSON Patch jew għall-paths tal-iżbalji tal-validaturi tal-JSON Schema.

Espressjonijiet tal-filtru: x’huwa appoġġjat

Il-filtri jiġu evalwati bil-jsonpath-plus f’modalità sigura: l-espressjoni tiġi analizzata u interpretata minn evalwatur żgħir, qatt ma tgħaddi għal eval jew new Function. Ġewwa [?( … )] tista’ tuża:

  • @ għall-oġġett kurrenti, @.field u @['field'] għall-membri tiegħu, @root għad-dokument kollu ($ mhuwiex disponibbli ġewwa filtru);
  • paraguni ==, !=, ===, !==, <, <=, >, >=;
  • loġika &&, ||, !, aritmetika + - * / % u t-ternarju a ? b : c;
  • literals ta’ string, numru, true, false, null u espressjoni regolari;
  • metodi tal-valuri nfushom, pereżempju @.title.startsWith('S'), @.tags.includes('new') jew @.title.match(/lord/i);
  • @property (iċ-ċavetta jew l-indiċi tal-oġġett kurrenti), @parent u @path (il-path normalizzat tiegħu), bl-istil tal-jsonpath-plus.

L-aċċess għal constructor, __proto__ u l-kostruttur Function huwa mblukkat. Jekk filtru jfalli fuq oġġett wieħed, pereżempju @.isbn.startsWith('0') fuq ktieb mingħajr isbn, dak l-oġġett sempliċement ma jaqbilx; żball tas-sintassi fl-espressjoni jiġi rrapportat. Filtri miktuba bil-mod RFC 9535, [[email protected] < 10] mingħajr parentesi, jiġu aċċettati u mqjusa bħala [?(@.price < 10)]. Funzjonijiet RFC 9535 bħal length(), count(), match() u search() mhumiex disponibbli: uża metodi tal-JavaScript bħal @.name.length minflok.

Is-selettur tat-tip tal-jsonpath-plus jaħdem ukoll fl-aħħar ta’ path: $..*@number() jirritorna kull numru, u @string(), @boolean(), @array(), @object(), @null() u @integer() jagħmlu l-istess għal tipi oħra.

Mistoqsijiet frekwenti

Il-JSON tiegħi jintbagħat lil server?

Le. L-analiżi u l-evalwazzjoni jseħħu fil-brawżer tiegħek, u d-data tiegħek qatt ma titlaq mill-kompjuter tiegħek.

Għaliex il-filtru tiegħi ma jirritorna xejn?

Iċċekkja li l-path qabel il-filtru jagħżel array jew oġġett: $.store.book[?(@.price < 10)] jiffiltra l-kotba, filwaqt li $.store[?(@.price < 10)] iħares lejn book u bicycle. Proprjetà nieqsa minn oġġett hija undefined, għalhekk il-paragun magħha huwa falz.

X’inhi d-differenza bejn `==` u `===`?

Bħal fil-JavaScript, == jikkonverti t-tipi ("10" == 10 huwa veru) filwaqt li === iqabbel it-tip u l-valur.

Għaliex l-output huwa limitat?

Biss l-ewwel 10,000 taqbila jinkitbu fir-riżultat, biex il-paġna tibqa’ tirrispondi; il-linja tal-istatus tagħti l-għadd sħiħ.

Il-JSONPath huwa standardizzat?

Iva, mill-2024, mill-RFC 9535. L-implimentazzjonijiet xorta jvarjaw, speċjalment fil-filtri; din l-għodda issegwi l-jsonpath-plus, is-sintassi tal-JSONPath oriġinali ta’ Stefan Goessner.