JSONPath என்றால் என்ன?
JSONPath என்பது JSON ஆவணங்களுக்கான ஒரு query மொழி, XML க்கான XPath இன் JSON சமதுல்யம். Stefan Goessner 2007 இல் ஒரு parser எழுதாமல் JSON மரத்தினுள் ஒரு node ஐ சுட்டிக்காட்ட குறுகிய, படிக்கக்கூடிய வழியாக இதை முன்மொழிந்தார். ஒரு வெளிப்பாடு root selector $ உடன் தொடங்கி property accessors, array subscripts, wildcards, recursive descent மற்றும் filter நிபந்தனைகளை சங்கிலியாக இணைக்கிறது. 2024 இல் IETF RFC 9535 ஐ வெளியிட்டது; இந்த சோதனையாளர் Goessner draft, பெரும்பாலான RFC 9535, மற்றும் சில extension operators ஐ உள்ளடக்கிய பரவலாகப் பயன்படுத்தப்படும் JavaScript implementation jsonpath-plus இல் இயங்குகிறது.
JSONPath எவ்வாறு வேலை செய்கிறது
ஒரு JSONPath வெளிப்பாடு இடமிருந்து வலம் படித்து JSON ஆவணத்தை ஒரு நேரத்தில் ஒரு படி நடக்கிறது. ஒவ்வொரு படியும் முந்தைய படியில் இருந்து உயிர்வாழ்ந்த nodes தொகுப்பை எடுத்து மேலும் சுருக்குகிறது. முழு மதிப்பீட்டு pipeline:
- root selector
$உடன் நங்கூரம் போடுங்கள். ஒவ்வொரு வெளிப்பாடும் இங்கே தொடங்குகிறது, அது object ஆக இருந்தாலும் array ஆக இருந்தாலும் top-level மதிப்பை சுட்டுகிறது. முன்னணி$இல்லாத bare property names சரியான JSONPath இல்லை. - dot notation (
$.store.book) அல்லது bracket notation ($['store']['book']) மூலம் child members க்கு நடக்கவும். ஒரு key இல் இடம், ஹைஃபன் அல்லது valid identifier இல்லாத எழுத்து இருக்கும்போது bracket notation அவசியம். - recursive descent operator
..மூலம் ஒரே நேரத்தில் ஒவ்வொரு அளவையும் தேடவும். வெளிப்பாடு$..authorஆழத்தைப் பொருட்படுத்தாமல் மரத்தில் எங்கும் ஒவ்வொருauthorமதிப்பையும் சேகரிக்கிறது. இது JMESPath க்கு இல்லாத operator. - array உறுப்புகளை index மூலம் தேர்ந்தெடுக்கவும் (
[0], jsonpath-plus இல் கடைசி item க்கு[-1]),[start:end]notation மூலம் slice செய்யவும் ([0:3]முதல் மூன்றை திருப்பித் தருகிறது), அல்லது wildcard[*]மூலம் ஒவ்வொரு உறுப்பையும் பிடிக்கவும். [?(...)]க்குள் ஒரு predicate மூலம் உறுப்புகளை வடிகட்டவும். predicate க்குள்,@தற்போதைய உறுப்பை குறிக்கிறது, எனவே[?(@.price<10)]priceபுலம் 10 க்கும் குறைவான items மட்டும் வைத்திருக்கிறது. Filters மீதி path உடன் இணைகின்றன, எனவே filter பிறகு descend, அல்லது descend பிறகு filter செய்யலாம்.- வெளியீட்டு வடிவத்தை தேர்ந்தெடுக்கவும். Values பொருந்திய தரவையே திருப்பித் தருகிறது. Paths engine என்ன resolve செய்தது என்று காண ஒவ்வொரு match இன் JSONPath ஐ திருப்பித் தருகிறது. Pointers downstream consumer JSON Patch அல்லது JSON Schema validator ஆக இருக்கும்போது பயனுள்ள ஒவ்வொரு match க்கும் சமான RFC 6901 JSON Pointer ஐ திருப்பித் தருகிறது.
இந்த JSONPath சோதனையாளரை ஏன் பயன்படுத்த வேண்டும்?
- உங்கள் JSON உலாவியை விட்டு போவதில்லை. Query பக்கத்திற்குள் இயங்குகிறது, எனவே production fixtures, customer PII மற்றும் pre-release API responses உங்கள் இயந்திரத்தில் இருக்கும்.
- Engine
jsonpath-plus9.x, பல production test suites மற்றும் CI assertions ஐ ஆதரிக்கும் அதே library. இங்கே நீங்கள் பார்க்கும் முடிவுகள் உங்கள் build pipeline காணும் முடிவுகளுடன் பொருந்தும். - மூன்று வெளியீட்டு modes பொதுவான downstream consumers ஐ உள்ளடக்குகிறது: copy-paste க்கு raw Values, engine இன் resolution debug செய்ய Paths, மற்றும் JSON Patch மற்றும் JSON Schema workflows க்கு RFC 6901 Pointers.
- Filter வெளிப்பாடுகள்
preventEval: trueஉடன் இயங்குகின்றன, எனவே ஒட்டப்பட்ட query host பக்கத்திற்கு எதிராக arbitrary JavaScript ஐ செயல்படுத்த முடியாது. வெளிப்பாடு Slack message, Jira ticket அல்லது ஒரு சகாவின் clipboard இலிருந்து வரும்போது இது முக்கியமானது.
JSONPath இன் பொதுவான பயன்பாடுகள்
கைமுறையாக recursive descent எழுதாமல் JSON payload இலிருந்து ஒரு புலத்தை இழுக்க code க்கு தேவைப்படும் எங்கும் JSONPath தோன்றுகிறது:
- Postman tests: Postman இல் Tests tab JSONPath-style access உடன் assertions க்கு
pm.response.json()ஐ வெளிப்படுத்துகிறது. Teams CI இல் assert செய்ய response இலிருந்து ஒரு புலத்தை இழுக்க$.data.user.emailபோன்ற ஒரு வெளிப்பாடு எழுதுகின்றன. - k6 load tests: k6 scripts response bodies இலிருந்து மதிப்புகளை எடுக்கவும் SLA thresholds assert செய்யவும் ஒரு
check()block க்குள்jsonpath()அழைக்கின்றன. Postman இல் ஒரு contract நிரூபிக்கும் அதே வெளிப்பாடு k6 கீழ் load test ஐ gate செய்யலாம். - JSON DSL for data transforms: AWS Step Functions
InputPath,ResultPathமற்றும்Parametersக்குள் JSONPath ஐ மதிப்பிட்டு states இடையே event payloads ஐ மறுவடிவமைக்கிறது. Kuberneteskubectl -o jsonpathcluster objects இலிருந்து புலங்களை எடுக்க அதே தொடரியல்லைப் பயன்படுத்துகிறது.
வேலை செய்யும் எடுத்துக்காட்டு
canonical Goessner fixture நான்கு books கொண்ட book store ஆவணம், ஒவ்வொன்றும் category, author, title மற்றும் price கொண்டது. அந்த fixture க்கு எதிராக, வெளிப்பாடு $.store.book[?(@.price<10)].title மூன்று படிகளில் இயங்குகிறது. முதலில், $.store.book அனைத்து நான்கு books இன் array க்கு resolve ஆகிறது. அடுத்து, filter [?(@.price<10)] 10 க்கும் குறைவாக விலை கொண்ட ஒரே book ஐ மட்டும் வைத்திருக்கிறது (8.95 ல் உள்ள entry). இறுதியாக, .title அந்த book இன் title ஐ எடுக்கிறது. முடிவு ["Sayings of the Century"]. Paths க்கு மாறுவது ["$['store']['book'][0]['title']"] திருப்பித் தருகிறது, மற்றும் Pointers ["/store/book/0/title"] திருப்பித் தருகிறது.
உங்கள் வெளிப்பாடுகளை இங்கே prototype செய்து, பிறகு Postman, k6, kubectl அல்லது Step Functions state machine க்கு நேரடியாக drop செய்யுங்கள். ஒட்டவும், query செய்யவும், நகலெடுக்கவும். எதுவும் network ஐ கடக்கவில்லை.
JSONPath என்றால் என்ன?
JSONPath என்பது JSON ஆவணங்களுக்கான ஒரு query மொழி, XML க்கான XPath க்கு analogous. Stefan Goessner 2007 இல் முன்மொழிந்து, IETF ஆல் 2024 இல் RFC 9535 ஆக standardised செய்யப்பட்டது.
இது $ (ஆவண root) உடன் தொடங்கும் compact வெளிப்பாடு தொடரியல்லைப் பயன்படுத்துகிறது மற்றும் JSON மரத்தினுள் nodes தேர்ந்தெடுக்க dot notation, array subscripts, wildcards, slices, recursive descent (..) மற்றும் filter வெளிப்பாடுகளை ([?(...)]) ஆதரிக்கிறது.
JSONPath JMESPath அல்லது jq இலிருந்து எவ்வாறு வேறுபடுகிறது?
மூன்றும் JSON ஐ query செய்கின்றன, ஆனால் அவற்றின் grammars மற்றும் இலக்குகள் வேறுபடுகின்றன. JMESPath AWS CLI / SDK standard: JSONPath ஐ விட கண்டிப்பானது, recursive descent இல்லை, predictable side-effect-free projection க்கு கட்டமைக்கப்பட்டது.
jq JSON ஐ query செய்வது மட்டுமல்லாமல் transform, reduce மற்றும் stream செய்யும் Turing-complete scripting மொழி. JSONPath இடையில் உள்ளது: recursive descent மற்றும் filters மூலம் JMESPath ஐ விட expressive, jq ஐ விட இலகுரகம், மற்றும் general-purpose test tooling (Postman, Playwright, REST Assured, kubectl, Step Functions) இல் மிக பரவலாக ஆதரிக்கப்பட்ட தொடரியல். இந்த சோதனையாளர் JSONPath ஐ implement செய்கிறது.
இந்த சோதனையாளர் என்ன dialect பயன்படுத்துகிறது?
இந்த சோதனையாளர் jsonpath-plus 9.x இயக்குகிறது. அந்த library Goessner 2007 spec ஐ implement செய்கிறது, பெரும்பாலான RFC 9535 ஐ உள்ளடக்குகிறது, மற்றும் type checks (@.string(), @.number(), @.boolean()) மற்றும் parent navigation (^) போன்ற extension operators சேர்க்கிறது.
preventEval: true flag எப்போதும் set செய்யப்படுகிறது, எனவே filter predicates JavaScript eval() built-in க்கு பதிலாக safe interpreter மூலம் இயங்குகின்றன. ஒட்டப்பட்ட query இந்த பக்கத்திற்கு எதிராக arbitrary code செயல்படுத்த முடியாது.
தனிப்பட்ட பொருந்திய மதிப்புகளை நகலெடுக்க முடியுமா?
ஆம். கிளிப்போர்டுக்கு நகலெடு பொத்தான் முழு முடிவு block ஐ JSON array ஆக நகலெடுக்கிறது. ஒரு மதிப்பை பிடிக்க, வெளியீட்டு mode ஐ Values க்கு மாற்றவும், பிறகு result textarea இல் நீங்கள் விரும்பும் வரியை தேர்ந்தெடுத்து உங்கள் உலாவியின் normal copy shortcut (Ctrl/Cmd + C) பயன்படுத்தவும்.
வெளியீடு plain JSON உரை, எனவே code editor, terminal, Postman test அல்லது Slack message இல் சுத்தமாக ஒட்டுகிறது.