JSONPath म्हणजे काय?
JSONPath हे JSON documents साठी एक query language आहे, XML साठी XPath चे JSON समकक्ष. Stefan Goessner ने 2007 मध्ये JSON tree च्या आत एखाद्या node कडे parser न लिहिता लहान, वाचनीय पद्धतीने निर्देश करण्यासाठी हे सुचवले. Expression root selector $ ने सुरू होतो आणि property accessors, array subscripts, wildcards, recursive descent, आणि filter conditions chain करतो. 2024 मध्ये IETF ने implementation मध्ये fragmented झालेल्या syntax standardise करण्यासाठी RFC 9535 प्रकाशित केला; हा tester jsonpath-plus वर चालतो, एक widely used JavaScript implementation जे Goessner draft, बहुतेक RFC 9535, आणि काही extension operators cover करतो.
JSONPath कसे कार्य करते
JSONPath expression डावीकडून उजवीकडे वाचतो आणि JSON document एका वेळी एक step walk करतो. प्रत्येक step मागील step मधून वाचलेल्या nodes चा संच घेतो आणि तो आणखी संकुचित करतो. संपूर्ण evaluation pipeline:
- Root selector
$ने anchor करा. प्रत्येक expression इथून सुरू होतो, top-level value कडे निर्देश करतो, मग ती object असो वा array.$शिवाय bare property names valid JSONPath नाहीत. - Dot notation (
$.store.book) किंवा bracket notation ($['store']['book']) वापरून child members मध्ये walk करा. जेव्हा key मध्ये space, hyphen, किंवा valid identifier नसलेले character असतात तेव्हा bracket notation आवश्यक आहे. - Recursive descent operator
..ने एकाच वेळी प्रत्येक level शोधा. Expression$..authortree मध्ये depth काहीही असला तरी प्रत्येकauthorvalue गोळा करतो. हा operator JMESPath कडे नाही. - Array elements index ने निवडा (
[0], jsonpath-plus मध्ये शेवटच्या item साठी[-1]),[start:end]notation ने slice करा ([0:3]पहिले तीन परत देतो), किंवा wildcard[*]ने सर्व elements घ्या. [?(...)]मध्ये predicate वापरून elements filter करा. Predicate च्या आत,@सध्याच्या element कडे निर्देश करतो, त्यामुळे[?(@.price<10)]फक्त ज्या items चेpricefield 10 पेक्षा कमी आहे ते ठेवतो. Filters path च्या उर्वरित भागासह compose होतात.- Output format निवडा. Values matched data स्वतः परत देतो. Paths प्रत्येक match चा JSONPath परत देतो. Pointers प्रत्येक match साठी समकक्ष RFC 6901 JSON Pointer परत देतो, JSON Patch किंवा JSON Schema validator साठी उपयुक्त.
हा JSONPath tester का वापरायचा?
- तुमचा JSON कधीही browser बाहेर जात नाही. Query page च्या आतच run होतो, त्यामुळे production fixtures, customer PII, आणि pre-release API responses तुमच्या machine वरच राहतात.
- Engine हा
jsonpath-plus9.x आहे, तोच library अनेक production test suites आणि CI assertions च्या मागे आहे. इथे दिसणारे results तुमच्या build pipeline ला दिसणाऱ्या results शी जुळतात. - तीन output modes सामान्य downstream consumers cover करतात: copy-paste साठी raw Values, engine चे resolution debug करण्यासाठी Paths, आणि JSON Patch आणि JSON Schema workflows साठी RFC 6901 Pointers.
- Filter expressions
preventEval: trueसोबत run होतात, त्यामुळे pasted query host page विरुद्ध arbitrary JavaScript execute करू शकत नाही. Slack message, Jira ticket, किंवा colleague च्या clipboard मधून expression आला असेल तेव्हा हे महत्त्वाचे आहे.
JSONPath चे सामान्य उपयोग
JSONPath जिथे code ला JSON payload मधून field काढायचे असते हाताने recursive descent न लिहिता, तिथे दिसतो:
- Postman tests: Postman मधील Tests tab
pm.response.json()JSONPath-style access सोबत assertions साठी उघड करतो. Teams CI मध्ये response मधून field काढण्यासाठी$.data.user.emailसारखे single expression लिहितात. - k6 load tests: k6 scripts response bodies मधून values काढण्यासाठी
check()block च्या आतjsonpath()call करतात आणि SLA thresholds assert करतात. Postman मध्ये contract prove करणारा तोच expression k6 अंतर्गत load test gate करू शकतो. - JSON DSL for data transforms: AWS Step Functions states दरम्यान event payloads reshape करण्यासाठी
InputPath,ResultPath, आणिParametersमध्ये JSONPath evaluate करतो. Argo Workflows array वर tasks fan-out करण्यासाठीwithParamमध्ये JSONPath वापरतो. Kuberneteskubectl -o jsonpathcluster objects मधून fields काढण्यासाठी तोच syntax वापरतो.
कार्यान्वित उदाहरण
Canonical Goessner fixture हा book store document आहे ज्यात चार books आहेत, प्रत्येकामध्ये category, author, title, आणि price आहे. त्या fixture विरुद्ध, expression $.store.book[?(@.price<10)].title तीन steps मध्ये run होतो. प्रथम, $.store.book सर्व चार books च्या array मध्ये resolve होतो. नंतर, filter [?(@.price<10)] फक्त 10 पेक्षा कमी किमतीचे एक book ठेवतो (8.95 वरील entry). शेवटी, .title त्या book चे title काढतो. निकाल ["Sayings of the Century"] आहे. Paths वर switching केल्यास ["$['store']['book'][0]['title']"] परत येतो, आणि Pointers ["/store/book/0/title"] परत देतो.
तुमचे expressions इथे prototype करा, मग ते थेट Postman, k6, kubectl, किंवा Step Functions state machine मध्ये टाका. Paste करा, query करा, copy करा. Network वर काहीही जात नाही.
JSONPath म्हणजे काय?
JSONPath हे JSON documents साठी एक query language आहे, XML साठी XPath प्रमाणे. Stefan Goessner ने 2007 मध्ये प्रस्तावित केले आणि 2024 मध्ये IETF ने RFC 9535 म्हणून standardise केले.
हे $ (document root) ने सुरू होणाऱ्या compact expression syntax वापरते आणि JSON tree मध्ये nodes select करण्यासाठी dot notation, array subscripts, wildcards, slices, recursive descent (..), आणि filter expressions ([?(...)]) support करते.
JSONPath JMESPath किंवा jq पेक्षा वेगळे कसे आहे?
तिन्ही JSON query करतात, पण त्यांचे grammars आणि उद्दिष्टे वेगळे आहेत. JMESPath AWS CLI / SDK standard आहे: JSONPath पेक्षा stricter, recursive descent नाही, predictable side-effect-free projection साठी बनवलेले.
jq एक Turing-complete scripting language आहे जी JSON query करतेच पण transform, reduce आणि stream पण करते. JSONPath मध्यभागी आहे: recursive descent आणि filters मुळे JMESPath पेक्षा अधिक expressive, jq पेक्षा हलका, आणि general-purpose test tooling मध्ये सर्वाधिक supported syntax (Postman, Playwright, REST Assured, kubectl, Step Functions). हा tester JSONPath implement करतो.
हा tester कोणता dialect वापरतो?
हा tester jsonpath-plus 9.x run करतो. ती library Goessner 2007 spec implement करते, RFC 9535 चे बहुतेक cover करते, आणि type checks (@.string(), @.number(), @.boolean()) आणि parent navigation (^) सारखे extension operators जोडते.
preventEval: true flag नेहमी set असतो, त्यामुळे filter predicates JavaScript eval() built-in ऐवजी safe interpreter द्वारे run होतात. Pasted query या page विरुद्ध arbitrary code execute करू शकत नाही.
मी individual matched values copy करू शकतो का?
होय. Copy to clipboard button पूर्ण result block JSON array म्हणून copy करतो. एकच value घ्यायची असल्यास, output mode Values वर switch करा, नंतर result textarea मध्ये हवी असलेली line select करा आणि browser चा normal copy shortcut (Ctrl/Cmd + C) वापरा.
Output plain JSON text आहे, त्यामुळे ते code editor, terminal, Postman test, किंवा Slack message मध्ये स्वच्छपणे paste होते.