Menene JSONPath?
JSONPath harshen tambaya ne don takardu na JSON, daidai na JSON na XPath don XML. Stefan Goessner ya gabatar da shi a 2007 a matsayin hanya mai taƙaitawa, mai karatu don nuna node a cikin bishiyar JSON ba tare da rubuta parser ba. Maganganu yana farawa da zaɓin tushe $ kuma yana jera mai samun dukiya, ƙirar array, wildcards, sauka mai sake, da sharuɗɗan tace har sai ya zaɓi nodes da kake so. A 2024 IETF ya buga RFC 9535 don tsara syntax da ya rarrabu a duk aiwatarwa; wannan mai gwadawa yana gudana akan jsonpath-plus, aiwatarwa na JavaScript mai amfani sosai wanda ke rufe tsarin Goessner, yawancin RFC 9535, da kaɗan daga cikin masu aiki masu faɗaɗawa a saman.
Yadda JSONPath ke aiki
Maganganu na JSONPath yana karanta daga hagu zuwa dama kuma yana tafiya cikin takarda na JSON mataki ɗaya a lokaci. Kowane mataki yana ɗaukar saiti na nodes da suka tsira daga mataki na baya kuma yana rage shi ƙari. Layin nazarin gaba ɗaya:
- Ɗaure da zaɓin tushe
$. Kowane maganganu yana farawa nan, yana nuna ƙima na matakin sama, ko dai abu ne ko array. Sunaye na dukiya kawai ba tare da$na jagora ba ba JSONPath mai inganci ba ne. - Tafi cikin mambobin ɗan yaro tare da dot notation (
$.store.book) ko bracket notation ($['store']['book']). Ana buƙatar bracket notation lokacin da makulli ke ƙunshe da sarari, alamar minus, ko kowane harafi da ba mai gane mai inganci ba ne. - Bincika kowane matakin nan take da mai aiki na sauka mai sake
... Maganganu$..authoryana tattara kowane ƙima naauthora ko'ina a cikin bishiyar, ba tare da la'akari da zurfin ba. Wannan shi ne mai aiki da JMESPath ba shi da shi. - Zaɓi abubuwan array ta index (
[0],[-1]don ƙarshen abu a cikin jsonpath-plus), yanke su da[start:end]notation ([0:3]yana dawo da uku na farko), ko kama kowane abu da wildcard[*]. - Tace abubuwa da sharaɗi a cikin
[?(...)]. A cikin sharaɗin,@yana nufin abin yanzu, don haka[?(@.price<10)]yana adana abubuwan da filinpriceya ƙasa da 10 kawai. Tace suna haɗa da sauran hanyar, don haka za ka iya tace sannan sauka, ko sauka sannan tace. - Zaɓi tsarin fitarwa. Ƙimomi yana dawo da bayanin da aka daidaita kanta. Hanyoyi yana dawo da JSONPath na kowane daidaituwa don ka iya ganin abin da injin ya warware. Mafiya yana dawo da daidai na RFC 6901 JSON Pointer don kowane daidaituwa, yana da amfani lokacin da mai cin nauyin da ke ƙasa JSON Patch ne ko mai tabbatar da JSON Schema.
Me ya sa amfani da wannan mai gwadawa na JSONPath?
- JSON ɗinka ba ya barin burauzar. Tambayar tana gudana a cikin shafin, don haka ɓoyayyiyar abubuwan da aka yi samarwa, PII na abokin ciniki, da amsoshin API kafin fitar suna zama a injinar ka.
- Injin shine
jsonpath-plus9.x, ɗakin karatu guda ɗaya da ke goyan bayan gwaje-gwaje da yawa na samarwa da tabbatarwar CI. Sakamakon da kake gani nan suna daidaita sakamakon da layin samarwar ginin ka zai gani. - Yanayi uku na fitarwa suna rufe masu cin nauyin da ke ƙasa na gari: Ƙimomi don kwafi-liƙa, Hanyoyi don warware kwaro a warwaren injin, da RFC 6901 Mafiya don ayyukan JSON Patch da JSON Schema.
- Maganganu na tace suna gudana tare da
preventEval: true, don haka tambaya da aka liƙa ba za ta iya aiwatar da JavaScript na sabani akan wannan shafi ba. Hakan yana da mahimmanci lokacin da maganganu ya zo daga sako na Slack, tikiti na Jira, ko allo na abokin aiki.
Ayyukan gari na JSONPath
JSONPath yana bayyana ko'ina inda lambar dole ta fitar da filin daga nauyin JSON ba tare da rubuta sauka mai sake da hannu ba:
- Gwaje-gwaje na Postman: taba Gwaje-gwaje a cikin Postman tana bayyana
pm.response.json()tare da samun salon JSONPath don tabbatarwa. Ƙungiyoyi suna rubuta maganganu guda ɗaya kamar$.data.user.emaildon fitar da filin daga amsa kuma tabbatar da shi a CI. - Gwaje-gwaje na loda na k6: rubutun k6 suna kiran
jsonpath()a cikin ɓangarencheck()don fitar da ƙimomi daga jikin amsa da tabbatar da ƙofar SLA. Maganganu guda ɗaya da ya tabbatar da kwangilar a cikin Postman na iya rufe gwajin loda a ƙarƙashin k6. - JSON DSL don canza bayanai: AWS Step Functions yana nazarin JSONPath a cikin
InputPath,ResultPath, daParametersdon sake siffa nauyin aiki na taron tsakanin jihohi. Argo Workflows yana amfani da JSONPath a cikinwithParamdon faɗaɗa ayyuka akan array. Kuberneteskubectl -o jsonpathyana amfani da syntax guda ɗaya don fitar da filayen daga abubuwan cluster.
Misali da aka yi aiki
Abubuwan da Goessner ya kafa na al'ada shine takarda ta shagon littafi tare da littattafai huɗu, kowannensu yana ɗaukar category, author, title, da price. Akan wannan abubuwa, maganganu $.store.book[?(@.price<10)].title yana gudana a matakai uku. Da farko, $.store.book yana warware zuwa array na duk littattafai huɗu. Na gaba, tace [?(@.price<10)] yana adana littafi ɗaya kawai da farashin da ya ƙasa da 10 (shigarwa a 8.95). A ƙarshe, .title yana fitar da taken wannan littafi. Sakamakon shine ["Sayings of the Century"]. Canza zuwa Hanyoyi yana dawo da ["$['store']['book'][0]['title']"], da Mafiya yana dawo da ["/store/book/0/title"].
Gwada maganganu ɗinka nan, sannan sakar su kai tsaye zuwa Postman, k6, kubectl, ko injin hali na Step Functions. Liƙa, tambaya, kwafi. Babu abin da ya wuce cibiyar sadarwa.
Menene JSONPath?
JSONPath harshen tambaya ne don takardu na JSON, kama da XPath don XML. Stefan Goessner ya gabatar da shi a 2007 kuma IETF ya tsara shi a matsayin RFC 9535 a 2024.
Yana amfani da maganganu mai taƙaitawa farawa da $ (tushen takarda) kuma yana goyan bayan dot notation, ƙirar array, wildcards, yanki, sauka mai sake (..), da maganganu na tace ([?(...)]) don zaɓi nodes a cikin bishiyar JSON.
Yaya JSONPath ya bambanta da JMESPath ko jq?
Dukkansu uku suna tambayar JSON, amma nahawu da manufofin su sun bambanta. JMESPath ma'aunin CLI/SDK na AWS ne: mai ƙarfi fiye da JSONPath, babu sauka mai sake, an gina don hasashen da ba shi da sakamako mai tabbata.
jq harshen rubutun Turing-cikakke ne wanda ba ya tambayar JSON kawai amma kuma yana canza, rage, da yada shi. JSONPath yana zaune tsakaninsu: mai bayyanawa fiye da JMESPath godiya ga sauka mai sake da tace, mafi sauƙi fiye da jq, kuma mafi goyan bayan syntax a cikin kayan aiki na gwajin manufa-gabaɗaya (Postman, Playwright, REST Assured, kubectl, Step Functions). Wannan mai gwadawa yana aiwatar da JSONPath.
Wane yare wannan mai gwadawa ke amfani da shi?
Wannan mai gwadawa yana gudana jsonpath-plus 9.x. Wannan ɗakin karatu yana aiwatar da takardar Goessner ta 2007, yana rufe yawancin RFC 9535, kuma yana ƙara masu aiki na faɗaɗawa kamar duba nau'i (@.string(), @.number(), @.boolean()) da tafiyar uba (^).
Ana saita tuta ta preventEval: true koyaushe, don haka sharuɗɗan tace suna gudana ta mai fassara mai aminci maimakon JavaScript eval() na asali. Tambaya da aka liƙa ba za ta iya aiwatar da lambar sabani akan wannan shafi ba.
Shin zan iya kwafi ƙimomi da aka daidaita na mutum-mutumi?
Eh. Maɓallin Kwafi zuwa allo yana kwafi ɓangaren sakamakon gaba ɗaya a matsayin array na JSON. Don kama ƙima guda ɗaya, canza yanayin fitarwa zuwa Ƙimomi, sannan zaɓi layin da kake so a yankin rubutu na sakamakon kuma yi amfani da taƙaitaccen kwafi na burauzarka na yau da kullum (Ctrl/Cmd + C).
Fitarwa rubutun JSON mai sauƙi ne, don haka yana liƙa da kyau a cikin mai gyara lambar, terminal, gwajin Postman, ko sako na Slack.