JSONPath ni nini?
JSONPath ni lugha ya hoja kwa hati za JSON, sawa na XPath kwa XML. Stefan Goessner alipendekeza mwaka 2007 kama njia fupi na inayosomeka ya kuonyesha nodi ndani ya mti wa JSON bila kuandika mchanganuzi. Msemo huanza na kichaguzi cha mzizi $ na unaunganisha vipatanishi vya mali, manukta ya safu wima, kadi-pori, kushuka kwa kina, na masharti ya kuchuja hadi unachagua nodi unazotaka. Mwaka 2024 IETF ilichapisha RFC 9535 kusawazisha sintaksia iliyokuwa imegawanyika katika utekelezaji mbalimbali; kipima hiki kinafanya kazi juu ya jsonpath-plus, utekelezaji unaotumika sana wa JavaScript unaoshughulikia rasimu ya Goessner, mengi ya RFC 9535, na baadhi ya opereta wa ziada.
JSONPath inafanya kazi vipi
Msemo wa JSONPath unasomeka kushoto kwenda kulia na kutembea hati ya JSON hatua moja kwa wakati. Kila hatua inachukua seti ya nodi zilizopita hatua ya awali na kuzipunguza zaidi. Mfululizo kamili wa tathmini:
- Anchors na kichaguzi cha mzizi
$. Kila msemo huanza hapa, ukiashiria thamani ya kiwango cha juu, iwe ni kitu au safu wima. Majina ya mali yaliyowazi bila$ya kuongoza si JSONPath halali. - Tembea ndani ya wanachama wa watoto na nukta (
$.store.book) au alama za mabano ($['store']['book']). Alama za mabano zinahitajika wakati funguo ina nafasi, kistari, au tabia yoyote ambayo si kitambulisho halali. - Tafuta kila kiwango kwa wakati mmoja na opereta wa kushuka kwa kina
... Msemo$..authorhukusanya kila thamani yaauthorpopote kwenye mti, bila kujali kina. Hii ndiyo opereta ambayo JMESPath hana. - Chagua vipengele vya safu wima kwa faharasa (
[0],[-1]kwa kipengele cha mwisho katika jsonpath-plus), vikata kwa alama za[start:end]([0:3]inarudisha vitatu vya kwanza), au chukua kila kipengele na kadi-pori[*]. - Chuja vipengele na kipengele cha utabiri ndani ya
[?(...)]. Ndani ya utabiri,@inaashiria kipengele cha sasa, kwa hivyo[?(@.price<10)]huweka vitu ambavyo sehemu yake yapriceiko chini ya 10. Vichujio vinachanganyika na mwili wa njia, kwa hivyo unaweza kuchuja kisha kushuka, au kushuka kisha kuchuja. - Chagua muundo wa matokeo. Thamani inarudisha data iliyofanana yenyewe. Njia inarudisha JSONPath ya kila mechi ili uweze kuona nini injini ilitatua. Viashiria inarudisha RFC 6901 JSON Pointer sawa kwa kila mechi, inayofaa wakati mtumiaji wa mtiririko wa chini ni JSON Patch au mthibitishaji wa JSON Schema.
Kwa nini utumie kipima hiki cha JSONPath?
- JSON yako haiacha kivinjari. Hoja inafanya kazi ndani ya ukurasa, kwa hivyo vifaa vya uzalishaji, PII ya wateja, na majibu ya API kabla ya kutolewa yanabaki kwenye mashine yako.
- Injini ni
jsonpath-plus9.x, maktaba ile ile inayosaidia mifululizo mingi ya majaribio ya uzalishaji na uthibitisho wa CI. Matokeo unayoyaona hapa yanalingana na matokeo mfululizo wako wa kujenga utakayoyaona. - Hali tatu za matokeo zinashughulikia watumiaji wa kawaida wa mtiririko wa chini: Thamani ghafi kwa kunakili-kubandika, Njia za kutatua utatuzi wa injini, na RFC 6901 Viashiria kwa mifumo ya JSON Patch na JSON Schema.
- Misemo ya kuchuja inafanya kazi na
preventEval: true, kwa hivyo hoja iliyobandikwa haiwezi kutekeleza JavaScript yoyote dhidi ya ukurasa wa mwenyeji. Hilo ni muhimu wakati msemo ulikuja kutoka kwa ujumbe wa Slack, tiketi ya Jira, au kibao cha kunakili cha mwenzako.
Matumizi ya kawaida ya JSONPath
JSONPath inaonekana popote msimbo unahitaji kuchomoa sehemu kutoka kwa mzigo wa JSON bila kuandika kushuka kwa kina kwa mkono:
- Majaribio ya Postman: kichupo cha Majaribio katika Postman kinaonyesha
pm.response.json()pamoja na upatikanaji wa mtindo wa JSONPath kwa uthibitisho. Timu zinaandika msemo mmoja kama$.data.user.emailkuchomoa sehemu kutoka kwa jibu na kuthibitisha juu yake katika CI. - Majaribio ya mzigo wa k6: hati za k6 zinaita
jsonpath()ndani ya block yacheck()kuchomoa thamani kutoka miili ya jibu na kuthibitisha viwango vya SLA. Msemo ule ule uliohakikisha mkataba katika Postman unaweza kufunga jaribio la mzigo chini ya k6. - JSON DSL kwa mabadiliko ya data: AWS Step Functions inatathmini JSONPath ndani ya
InputPath,ResultPath, naParameterskubadilisha mzigo wa matukio kati ya hali. Argo Workflows inatumia JSONPath katikawithParamkupanua kazi juu ya safu wima. Kuberneteskubectl -o jsonpathinatumia sintaksia ile ile kuchomoa sehemu kutoka vitu vya nguzo.
Mfano uliofanyiwa kazi
Kifaa cha Goessner cha kawaida ni hati ya duka la vitabu yenye vitabu vinne, kila kimoja kikiwa na category, author, title, na price. Dhidi ya kifaa hicho, msemo $.store.book[?(@.price<10)].title unafanya kazi katika hatua tatu. Kwanza, $.store.book inatatua hadi safu wima ya vitabu vyote vinne. Kisha, kichujio [?(@.price<10)] huweka kitabu pekee chenye bei chini ya 10 (ingizo kwa 8.95). Hatimaye, .title inachomoa kichwa cha kitabu hicho. Matokeo ni ["Sayings of the Century"]. Kubadilisha hadi Njia inarudisha ["$['store']['book'][0]['title']"], na Viashiria inarudisha ["/store/book/0/title"].
Tengeneza misemo yako hapa, kisha iingize moja kwa moja kwenye Postman, k6, kubectl, au mashine ya hali ya Step Functions. Bandika, hoji, nakili. Hakuna kinachopita mtandao.
JSONPath ni nini?
JSONPath ni lugha ya hoja kwa hati za JSON, inayofanana na XPath kwa XML. Stefan Goessner alipendekeza mwaka 2007 na IETF ikaisawazisha kama RFC 9535 mwaka 2024.
Inatumia sintaksia fupi ya msemo inayoanza na $ (mzizi wa hati) na inasaidia nukta, manukta ya safu wima, kadi-pori, vipande, kushuka kwa kina (..), na misemo ya kuchuja ([?(...)]) kuchagua nodi ndani ya mti wa JSON.
JSONPath inatofautiana na JMESPath au jq vipi?
Zote tatu huhoji JSON, lakini sarufi na malengo yao yanatofautiana. JMESPath ni kiwango cha AWS CLI / SDK: kali zaidi kuliko JSONPath, bila kushuka kwa kina, imejengwa kwa mradi usio na athari za pembeni unaoweza kutabiriwa.
jq ni lugha kamili ya uandishi wa Turing ambayo si tu inayohoji JSON bali pia inabadilisha, kupunguza, na kutiririsha. JSONPath iko kati yao: yenye kueleza zaidi kuliko JMESPath shukrani kwa kushuka kwa kina na vichujio, nyepesi kuliko jq, na sintaksia inayosaidiwa sana zaidi katika zana za majaribio za matumizi ya jumla (Postman, Playwright, REST Assured, kubectl, Step Functions). Kipima hiki kinatekeleza JSONPath.
Kipima hiki kinatumia lahaja gani?
Kipima hiki kinaendesha jsonpath-plus 9.x. Maktaba hiyo inatekeleza uainishi wa Goessner 2007, inashughulikia mengi ya RFC 9535, na inaongeza opereta wa ziada kama ukaguzi wa aina (@.string(), @.number(), @.boolean()) na urambazaji wa mzazi (^).
Bendera ya preventEval: true imewekwa daima, kwa hivyo vitabiri vya kuchuja hufanya kazi kupitia mkalimani salama badala ya JavaScript eval() iliyojengwa ndani. Hoja iliyobandikwa haiwezi kutekeleza msimbo wowote dhidi ya ukurasa huu.
Je, naweza kunakili thamani moja zilizofanana?
Ndiyo. Kitufe cha Nakili kwenye ubao wa kunakili kinakili block nzima ya matokeo kama safu wima ya JSON. Kuchukua thamani moja, badilisha hali ya matokeo hadi Thamani, kisha chagua mstari unaotaka kwenye eneo la maandishi la matokeo na utumie njia ya kawaida ya kunakili ya kivinjari chako (Ctrl/Cmd + C).
Matokeo ni maandishi ya JSON wazi, kwa hivyo yanabandikwa safi katika kihariri cha msimbo, terminal, jaribio la Postman, au ujumbe wa Slack.