§

Subukan ang mga JSONPath expression

Output na format:
JSONPath mabilis na sanggunian
Token Meaning
$Root element ng dokumento
@Kasalukuyang element (ginagamit sa loob ng filter expression)
.Child member operator: pumipili ng named na bata
..Recursive descent: naghahanap sa lahat ng inapo
*Wildcard: tumutugma sa anumang element o property
[*]Lahat ng item ng isang array
[n]Array element sa index n (zero-based)
[start:end]Array slice mula sa start hanggang sa (hindi kasama) end
[?(@.x)]Filter: mga item kung saan umiiral ang property x
[?(@.x==1)]Filter: mga item kung saan katumbas ng 1 ang property x
[(@.length-1)]Script expression: huling element ng isang array

Sa Philippine developer at QA community, ang JSONPath ay ginagamit sa buong API testing workflow. Ang mga engineer na nagsu-submit ng REST API para sa mga BSP-regulated na fintech integration (GCash, Maya, Open Finance Pilipinas) ay gumagamit ng JSONPath sa Postman para ma-validate ang mga field ng response tulad ng `$.data.transactionId` at `$.status`. Ang mga developer ng government portal sa ilalim ng DICT ay gumagamit din ng JSONPath sa kanilang CI pipeline para ma-assert ang mga response ng AWS Lambda function. Ang pagtakbo ng mga expression na ito sa browser ay nagpapanatili ng mga proprietary na test fixture at mga sensitibong API response sa iyong machine.

Ano ang JSONPath?

Ang JSONPath ay isang query language para sa mga JSON na dokumento, ang katumbas ng JSON para sa XPath ng XML. Iminungkahi ito ni Stefan Goessner noong 2007 bilang isang maikling, mababasang paraan para ituro ang isang node sa loob ng isang JSON tree nang hindi nagsusulat ng parser. Ang isang expression ay nagsisimula sa root selector na $ at nagka-chain ng property accessor, array subscript, wildcard, recursive descent, at filter condition hanggang mapili ang mga node na gusto mo. Noong 2024, inilathala ng IETF ang RFC 9535 para ma-standardize ang syntax na naghiwa-hiwalay sa mga implementasyon; ang tester na ito ay tumatakbo sa jsonpath-plus, isang malawakang ginagamit na JavaScript na implementasyon na sumasaklaw sa Goessner draft, karamihan sa RFC 9535, at ilang extension operator pa.

Paano gumagana ang JSONPath

Ang isang JSONPath expression ay nagbabasa mula kaliwa hanggang kanan at naglalakad ng isang JSON na dokumento nang isang hakbang sa isang pagkakataon. Ang bawat hakbang ay kumukuha ng hanay ng mga node na nakaligtas sa nakaraang hakbang at higit itong pinipihit. Ang buong evaluation pipeline:

  1. Mag-anchor gamit ang root selector na $. Ang bawat expression ay nagsisimula dito, tumutukoy sa top-level na halaga, maging ito ay isang object o array. Ang mga bare property name na walang leading na $ ay hindi valid na JSONPath.
  2. Maglakad sa mga child member gamit ang dot notation ($.store.book) o bracket notation ($['store']['book']). Kailangan ang bracket notation kapag ang isang key ay naglalaman ng espasyo, gitling, o anumang character na hindi isang valid na identifier.
  3. Hanapin ang bawat antas nang sabay gamit ang recursive descent operator na ... Ang expression na $..author ay nangongolekta ng bawat author na halaga kahit saan sa tree, anuman ang lalim. Ito ang operator na wala sa JMESPath.
  4. Pumili ng mga array element ayon sa index ([0], [-1] para sa huling item sa jsonpath-plus), i-slice ang mga ito gamit ang [start:end] notation ([0:3] ay nagbabalik ng unang tatlo), o kunin ang bawat element gamit ang wildcard na [*].
  5. Mag-filter ng mga element gamit ang isang predicate sa loob ng [?(...)]. Sa loob ng predicate, tinutukoy ng @ ang kasalukuyang element, kaya ang [?(@.price<10)] ay nagpapanatili lamang ng mga item na ang field na price ay mas mababa sa 10. Nagko-compose ang mga filter sa natitirang bahagi ng path, kaya maaari kang mag-filter pagkatapos ay bumaba, o bumaba pagkatapos ay mag-filter.
  6. Pumili ng output na format. Ang Mga Halaga ay nagbabalik ng matched na datos mismo. Ang Mga Path ay nagbabalik ng JSONPath ng bawat match para makita mo kung ano ang na-resolve ng engine. Ang Mga Pointer ay nagbabalik ng katumbas na RFC 6901 JSON Pointer para sa bawat match, kapaki-pakinabang kapag ang downstream consumer ay JSON Patch o isang JSON Schema validator.

Bakit gamitin ang JSONPath tester na ito?

  • Hindi kailanman lumalabas ang iyong JSON sa browser. Ang query ay tumatakbo sa loob ng page, kaya ang mga production fixture, customer na PII, at mga pre-release na API response ay nananatili sa iyong machine.
  • Ang engine ay jsonpath-plus 9.x, ang parehong library na sumusuporta sa maraming production test suite at CI assertion. Ang mga resulta na makikita mo dito ay tumutugma sa mga resulta na makikita ng iyong build pipeline.
  • Tatlong output mode ang sumasaklaw sa mga karaniwang downstream consumer: raw na Mga Halaga para sa copy-paste, Mga Path para sa pag-debug ng resolution ng engine, at RFC 6901 Mga Pointer para sa mga JSON Patch at JSON Schema workflow.
  • Ang mga filter expression ay tumatakbo na may preventEval: true, kaya ang isang na-paste na query ay hindi makakapagpatakbo ng arbitrary na JavaScript laban sa host na page. Iyon ay mahalaga kapag ang expression ay nagmula sa isang Slack message, Jira ticket, o clipboard ng isang kasamahan.

Mga karaniwang paggamit ng JSONPath

Ang JSONPath ay lumalabas saanman ang code ay kailangang kumuha ng field mula sa isang JSON payload nang hindi nagsusulat ng recursive descent nang mano-mano:

  • Mga Postman test: ang Tests tab sa Postman ay naglalantad ng pm.response.json() kasabay ng JSONPath-style na access para sa mga assertion. Ang mga team ay nagsusulat ng isang expression tulad ng $.data.user.email para kumuha ng field mula sa isang response at mag-assert dito sa CI.
  • Mga k6 load test: ang mga k6 script ay tumatawag ng jsonpath() sa loob ng isang check() block para makuha ang mga halaga mula sa mga response body at mag-assert ng mga SLA threshold. Ang parehong expression na nagpatunay ng kontrata sa Postman ay maaaring mag-gate ng isang load test sa ilalim ng k6.
  • JSON DSL para sa mga data transform: sinusuri ng AWS Step Functions ang JSONPath sa loob ng InputPath, ResultPath, at Parameters para muling hubugin ang mga event payload sa pagitan ng mga estado. Gumagamit ang Argo Workflows ng JSONPath sa withParam para mag-fan-out ng mga gawain sa isang array. Gumagamit ang Kubernetes kubectl -o jsonpath ng parehong syntax para makuha ang mga field mula sa mga cluster object.

Halimbawang trabaho

Ang canonical na Goessner fixture ay ang book store na dokumento na may apat na libro, bawat isa ay may category, author, title, at price. Laban sa fixture na iyon, ang expression na $.store.book[?(@.price<10)].title ay tumatakbo sa tatlong hakbang. Una, ang $.store.book ay nag-re-resolve sa array ng lahat ng apat na libro. Susunod, ang filter na [?(@.price<10)] ay nagpapanatili lamang ng isang libro na may presyong mas mababa sa 10 (ang entry na 8.95). Sa wakas, ang .title ay kumukuha ng pamagat ng libro na iyon. Ang resulta ay ["Sayings of the Century"]. Ang paglipat sa Mga Path ay nagbabalik ng ["$['store']['book'][0]['title']"], at ang Mga Pointer ay nagbabalik ng ["/store/book/0/title"].

I-prototype ang iyong mga expression dito, pagkatapos ay direktang ilagay ang mga ito sa Postman, k6, kubectl, o isang Step Functions state machine. Mag-paste, mag-query, kopyahin. Walang tumatawid sa network.

Ano ang JSONPath?

Ang JSONPath ay isang query language para sa mga JSON na dokumento, katulad ng XPath para sa XML. Iminungkahi ni Stefan Goessner noong 2007 at na-standardize ng IETF bilang RFC 9535 noong 2024.

Gumagamit ito ng compact na expression syntax na nagsisimula sa $ (ang root ng dokumento) at sinusuportahan ang dot notation, array subscript, wildcard, slice, recursive descent (..), at filter expression ([?(...)]) para pumili ng mga node sa loob ng isang JSON tree.

Paano naiiba ang JSONPath mula sa JMESPath o jq?

Lahat ng tatlo ay nagtatanong sa JSON, ngunit ang kanilang mga grammar at layunin ay naiiba. Ang JMESPath ay ang pamantayan ng AWS CLI / SDK: mas mahigpit kaysa sa JSONPath, walang recursive descent, itinayo para sa predictable na side-effect-free na projection.

Ang jq ay isang Turing-complete na scripting language na hindi lamang nagtatanong ng JSON kundi pati na rin nag-transform, nagre-reduce, at nagsi-stream nito. Ang JSONPath ay nasa pagitan ng mga ito: mas ekspresibo kaysa sa JMESPath salamat sa recursive descent at mga filter, mas magaan kaysa sa jq, at ang pinaka-malawakang sinusuportahang syntax sa pangkalahatang layuning test tooling (Postman, Playwright, REST Assured, kubectl, Step Functions). Ang tester na ito ay nagpapatupad ng JSONPath.

Anong dialect ang ginagamit ng tester na ito?

Ang tester na ito ay nagpapatakbo ng jsonpath-plus 9.x. Isinasagawa ng library na iyon ang Goessner 2007 spec, sumasaklaw sa karamihan ng RFC 9535, at nagdaragdag ng extension operator tulad ng type check (@.string(), @.number(), @.boolean()) at parent navigation (^).

Ang flag na preventEval: true ay palaging nakatakda, kaya ang mga filter predicate ay tumatakbo sa pamamagitan ng isang ligtas na interpreter sa halip na ang built-in na JavaScript eval(). Hindi makakapagpatakbo ng arbitrary na code ang isang na-paste na query laban sa page na ito.

Maaari ba akong kopyahin ang mga indibidwal na matched na halaga?

Oo. Ang button na Kopyahin sa clipboard ay kinokopya ang buong result block bilang isang JSON array. Para kumuha ng isang halaga, i-switch ang output mode sa Mga Halaga, pagkatapos ay piliin ang linya na gusto mo sa result textarea at gamitin ang karaniwang copy shortcut ng iyong browser (Ctrl/Cmd + C).

Ang output ay plain JSON text, kaya maayos itong nai-paste sa isang code editor, terminal, Postman test, o Slack message.