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 RFC 9535 ಪ್ರಕಟಿಸಿ syntax standardise ಮಾಡಿತು; ಈ tester jsonpath-plus ಮೇಲೆ ನಡೆಯುತ್ತದೆ, ಇದು Goessner draft, RFC 9535 ರ ಹೆಚ್ಚಿನ ಭಾಗ ಮತ್ತು ಕೆಲಕ extension operators ಒಳಗೊಳ್ಳುತ್ತದೆ.
JSONPath ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ
JSONPath expression ಎಡದಿಂದ ಬಲಕ್ಕೆ ಓದುತ್ತದೆ ಮತ್ತು JSON document ಅನ್ನು ಒಂದು ಹಂತದಲ್ಲಿ ನಡೆಯುತ್ತದೆ. ಪ್ರತಿ ಹಂತ ಹಿಂದಿನ ಹಂತ survive ಮಾಡಿದ nodes ನ ಗುಂಪನ್ನು ತೆಗೆದುಕೊಂಡು ಮತ್ತಷ್ಟು ಕಿರಿದಾಗಿಸುತ್ತದೆ. ಸಂಪೂರ್ಣ evaluation pipeline:
- Root selector
$ಮೂಲಕ anchor ಮಾಡಿ. ಪ್ರತಿ expression ಇಲ್ಲಿ ಶುರುವಾಗುತ್ತದೆ, top-level value ಅನ್ನು ಸೂಚಿಸುತ್ತದೆ, ಅದು object ಆಗಿರಲಿ ಅಥವಾ array ಆಗಿರಲಿ. ಮುಂದಿನ$ಇಲ್ಲದ bare property names ಮಾನ್ಯ JSONPath ಅಲ್ಲ. - Dot notation (
$.store.book) ಅಥವಾ bracket notation ($['store']['book']) ಮೂಲಕ child members ಒಳಗೆ ನಡೆಯಿರಿ. Key ಯಲ್ಲಿ space, hyphen, ಅಥವಾ valid identifier ಅಲ್ಲದ character ಇದ್ದಾಗ bracket notation ಅಗತ್ಯ. Dot notation ಸಾಮಾನ್ಯ ಗುರ್ತಿಸಲ್ಪಟ್ಟ property names ಗಾಗಿ ಸಂಕ್ಷಿಪ್ತ ಆಯ್ಕೆ. - Recursive descent operator
..ಮೂಲಕ ಒಂದೇ ಬಾರಿ ಪ್ರತಿ level ಹುಡುಕಿ.$..authorexpression tree ನಲ್ಲಿ ಯಾವ depth ನಲ್ಲಿ ಇದ್ದರೂ ಪ್ರತಿauthorಮೌಲ್ಯ ಸಂಗ್ರಹಿಸುತ್ತದೆ. JMESPath ಗೆ ಇಲ್ಲದ operator ಇದು. - Array elements ಅನ್ನು index (
[0],[-1]ಕೊನೆಯ item ಗಾಗಿ) ಮೂಲಕ ಆಯ್ಕೆ ಮಾಡಿ,[start:end]notation ಮೂಲಕ slice ಮಾಡಿ, ಅಥವಾ wildcard[*]ಮೂಲಕ ಪ್ರತಿ element ತೆಗೆಯಿರಿ. [?(...)]ಒಳಗಿನ predicate ಮೂಲಕ elements filter ಮಾಡಿ. Predicate ಒಳಗೆ@ಪ್ರಸ್ತುತ element ಅನ್ನು ಸೂಚಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ[?(@.price<10)]ಕೇವಲpricefield 10 ಕ್ಕಿಂತ ಕಡಿಮೆ ಇರುವ items ಇರಿಸುತ್ತದೆ.- ಔಟ್ಪುಟ್ ಫಾರ್ಮ್ಯಾಟ್ ಆಯ್ಕೆ ಮಾಡಿ. Values ಹೊಂದಾಣಿಕೆಯಾದ ಡೇಟಾ ಮರಳಿಸುತ್ತದೆ. Paths ಪ್ರತಿ match ನ JSONPath ಮರಳಿಸುತ್ತದೆ. Pointers ಪ್ರತಿ match ಗೆ ಸಮಾನ RFC 6901 JSON Pointer ಮರಳಿಸುತ್ತದೆ, JSON Patch ಅಥವಾ JSON Schema validator ಬಳಸುವಾಗ ಉಪಯುಕ್ತ.
ಈ JSONPath tester ಅನ್ನು ಏಕೆ ಬಳಸಬೇಕು?
- ನಿಮ್ಮ JSON ಬ್ರೌಸರ್ ಬಿಡುವುದಿಲ್ಲ. Query page ಒಳಗೆ ನಡೆಯುತ್ತದೆ, ಆದ್ದರಿಂದ production fixtures, customer PII ಮತ್ತು pre-release API responses ನಿಮ್ಮ ಯಂತ್ರದಲ್ಲಿ ಉಳಿಯುತ್ತವೆ.
- Engine
jsonpath-plus9.x ಆಗಿದ್ದು ಅನೇಕ production test suites ಮತ್ತು CI assertions ಗೆ ಬೆನ್ನೆಲುಬು ಆದ ಅದೇ library. ಇಲ್ಲಿ ನೀವು ನೋಡುವ ಫಲಿತಾಂಶಗಳು ನಿಮ್ಮ build pipeline ನೋಡುವ ಫಲಿತಾಂಶಗಳಿಗೆ ಹೊಂದಿಕೊಳ್ಳುತ್ತವೆ. - ಮೂರು output modes ಸಾಮಾನ್ಯ downstream consumers ಒಳಗೊಳ್ಳುತ್ತವೆ: copy-paste ಗಾಗಿ raw Values, engine ನ resolution debug ಮಾಡಲು Paths, ಮತ್ತು JSON Patch ಮತ್ತು JSON Schema workflows ಗಾಗಿ RFC 6901 Pointers. ಈ ಮೂರು modes ವಿಭಿನ್ನ tooling workflows ಗಾಗಿ ಸೂಕ್ತ output ಒದಗಿಸುತ್ತವೆ.
- Filter expressions
preventEval: trueಸಮೇತ ನಡೆಯುತ್ತವೆ, ಆದ್ದರಿಂದ pasted query host page ಮೇಲೆ arbitrary JavaScript execute ಮಾಡಲಾಗುವುದಿಲ್ಲ. Expression Slack message, Jira ticket, ಅಥವಾ colleague ನ clipboard ನಿಂದ ಬಂದಾಗ ಇದು ಮಹತ್ವ ಏಕೆಂದರೆ untrusted expressions ಸಾಧ್ಯ ಮಾಡಿದ code injection ಇಲ್ಲಿ blocked ಆಗಿದೆ.
JSONPath ನ ಸಾಮಾನ್ಯ ಅನ್ವಯಗಳು
Code JSON payload ನಿಂದ field ತೆಗೆಯಬೇಕಾದ ಎಲ್ಲ ಕಡೆ JSONPath ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ:
- Postman tests: Postman ನ Tests tab
pm.response.json()ಜೊತೆ JSONPath-style access for assertions expose ಮಾಡುತ್ತದೆ. Teams response ನಿಂದ field ತೆಗೆದು CI ನಲ್ಲಿ assert ಮಾಡಲು$.data.user.emailನಂತಹ ಒಂದೇ expression ಬರೆಯುತ್ತವೆ. - k6 load tests: k6 scripts response bodies ನಿಂದ values extract ಮಾಡಲು
check()block ಒಳಗೆjsonpath()call ಮಾಡಿ SLA thresholds assert ಮಾಡುತ್ತವೆ. Postman ನಲ್ಲಿ contract prove ಮಾಡಿದ ಅದೇ expression k6 ಅಡಿ load test gate ಮಾಡಬಹುದು. - JSON DSL for data transforms: AWS Step Functions
InputPath,ResultPathಮತ್ತುParametersಒಳಗೆ JSONPath evaluate ಮಾಡಿ states ನಡುವೆ event payloads reshape ಮಾಡುತ್ತದೆ. Argo WorkflowswithParamನಲ್ಲಿ JSONPath ಬಳಸಿ array ಮೇಲೆ tasks fan-out ಮಾಡುತ್ತದೆ. Kuberneteskubectl -o jsonpathcluster objects ನಿಂದ fields extract ಮಾಡಲು ಅದೇ syntax ಬಳಸುತ್ತದೆ.
ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆ
ಕ್ಯಾನೋನಿಕಲ್ Goessner fixture ನಾಲ್ಕು books ಸಮೇತ book store document ಆಗಿದೆ. ಆ fixture ಮೇಲೆ, expression $.store.book[?(@.price<10)].title ಮೂರು ಹಂತಗಳಲ್ಲಿ ನಡೆಯುತ್ತದೆ. ಮೊದಲು, $.store.book ಎಲ್ಲಾ ನಾಲ್ಕು books ನ array resolve ಮಾಡುತ್ತದೆ. ನಂತರ, filter [?(@.price<10)] 10 ಕ್ಕಿಂತ ಕಡಿಮೆ ಬೆಲೆಯ ಒಂದು book ಮಾತ್ರ ಇರಿಸುತ್ತದೆ. ಕೊನೆಗೆ, .title ಆ book ನ title extract ಮಾಡುತ್ತದೆ. ಫಲಿತಾಂಶ ["Sayings of the Century"]. Paths ಗೆ ಬದಲಿಸಿದರೆ ["$['store']['book'][0]['title']"] ಮರಳಿಸುತ್ತದೆ.
ನಿಮ್ಮ expressions ಇಲ್ಲಿ prototype ಮಾಡಿ, ನಂತರ Postman, k6, kubectl, ಅಥವಾ Step Functions state machine ಗೆ ನೇರವಾಗಿ ಹಾಕಿ. Paste ಮಾಡಿ, query ಮಾಡಿ, ನಕಲಿಸಿ. ಏನೂ network ದಾಟುವುದಿಲ್ಲ.
JSONPath ಎಂದರೇನು?
JSONPath ಒಂದು JSON documents ಗಾಗಿ query language ಆಗಿದ್ದು XML ಗಾಗಿ XPath ಗೆ analogous. Stefan Goessner 2007 ರಲ್ಲಿ ಪ್ರಸ್ತಾಪಿಸಿದ್ದು IETF 2024 ರಲ್ಲಿ RFC 9535 ಆಗಿ standardise ಮಾಡಿತು.
ಇದು $ (document root) ನಿಂದ ಶುರುವಾಗುವ compact expression syntax ಬಳಸಿ JSON tree ಒಳಗಿನ nodes select ಮಾಡಲು dot notation, array subscripts, wildcards, slices, recursive descent (..), ಮತ್ತು filter expressions ([?(...)]) support ಮಾಡುತ್ತದೆ. ಈ ಎಲ್ಲ operators ಒಂದೇ expression ನಲ್ಲಿ chain ಮಾಡಿ deeply nested JSON data navigate ಮಾಡಬಹುದು.
JSONPath, JMESPath ಅಥವಾ jq ಗಿಂತ ಹೇಗೆ ಭಿನ್ನ?
ಮೂರೂ JSON query ಮಾಡುತ್ತವೆ, ಆದರೆ ಅವುಗಳ grammars ಮತ್ತು goals ಭಿನ್ನ. JMESPath AWS CLI / SDK standard: JSONPath ಗಿಂತ stricter, recursive descent ಇಲ್ಲ, predictable side-effect-free projection ಗಾಗಿ built.
jq ಒಂದು Turing-complete scripting language ಆಗಿದ್ದು JSON ಅನ್ನು query ಮಾಡುವುದಲ್ಲದೆ transform, reduce ಮತ್ತು stream ಮಾಡುತ್ತದೆ. JSONPath ಅವರ ನಡುವೆ ಇದೆ: JMESPath ಗಿಂತ expressive — recursive descent ಮತ್ತು filters ಇರುವುದರಿಂದ — jq ಗಿಂತ ಹಗುರ, ಮತ್ತು general-purpose test tooling (Postman, Playwright, REST Assured, kubectl, Step Functions) ನಲ್ಲಿ ಅತ್ಯಂತ ವ್ಯಾಪಕವಾಗಿ supported syntax. ಈ tester JSONPath implement ಮಾಡುತ್ತದೆ.
ಈ tester ಯಾವ dialect ಬಳಸುತ್ತದೆ?
ಈ tester jsonpath-plus 9.x ಚಲಾಯಿಸುತ್ತದೆ. ಆ library Goessner 2007 spec implement ಮಾಡುತ್ತದೆ, RFC 9535 ರ ಹೆಚ್ಚಿನ ಭಾಗ ಒಳಗೊಳ್ಳುತ್ತದೆ, ಮತ್ತು type checks (@.string(), @.number()) ಮತ್ತು parent navigation (^) ನಂತಹ extension operators ಸೇರಿಸುತ್ತದೆ.
preventEval: true flag ಯಾವಾಗಲೂ set ಆಗಿರುತ್ತದೆ, ಆದ್ದರಿಂದ filter predicates JavaScript eval() ಬದಲು safe interpreter ಮೂಲಕ ನಡೆಯುತ್ತವೆ. Pasted query ಈ page ಮೇಲೆ arbitrary code execute ಮಾಡಲಾಗುವುದಿಲ್ಲ.
ಪ್ರತ್ಯೇಕ ಹೊಂದಾಣಿಕೆಯಾದ ಮೌಲ್ಯಗಳನ್ನು ನಾನು ನಕಲಿಸಬಹುದೇ?
ಹೌದು. ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿ button ಪೂರ್ಣ result block ಅನ್ನು JSON array ಆಗಿ ನಕಲಿಸುತ್ತದೆ. ಒಂದು ಮೌಲ್ಯ ತೆಗೆಯಲು, output mode ಅನ್ನು Values ಗೆ ಬದಲಿಸಿ, ನಂತರ result textarea ನಲ್ಲಿ ಬಯಸಿದ ಸಾಲು select ಮಾಡಿ ಮತ್ತು ನಿಮ್ಮ ಬ್ರೌಸರ್ ನ normal copy shortcut (Ctrl/Cmd + C) ಬಳಸಿ.
ಔಟ್ಪುಟ್ plain JSON text ಆಗಿದ್ದು code editor, terminal, Postman test, ಅಥವಾ Slack message ಗೆ ಸ್ವಚ್ಛವಾಗಿ paste ಆಗುತ್ತದೆ.