JSONPath एवैल्युएटर & टेस्टर
JSON पेस्ट करें, एक JSONPath एक्सप्रेशन टाइप करें, और मैच होने वाली वैल्यू व उनके सटीक
पाथ लाइव अपडेट होते देखें। समर्थन: $ रूट, .child, [*] वाइल्डकार्ड,
.. रिकर्सिव डिसेंट, [n] इंडेक्स, [start:end:step] स्लाइस, यूनियन
और [?(@.price < 10)] फ़िल्टर। सब कुछ आपके ब्राउज़र में चलता है — कुछ भी अपलोड नहीं होता।
[ "Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien" ]
$['store']['book'][0]['author'] $['store']['book'][1]['author'] $['store']['book'][2]['author'] $['store']['book'][3]['author']
JSONPath टेस्टर का उपयोग कैसे करें
बाईं ओर JSON पेस्ट करें (या नमूना रहने दें), फिर JSONPath बॉक्स में एक एक्सप्रेशन टाइप करें। परिणाम टाइप करते ही अपडेट होता है: Values टैब मैच होने वाली वैल्यू को एक JSON ऐरे के रूप में दिखाता है, और Paths टैब हर मैच का सटीक स्थान दिखाता है। सामान्य पैटर्न लोड करने के लिए उदाहरण चिप्स इस्तेमाल करें, अपने JSON को सुंदर-प्रिंट करने के लिए Format, और मौजूदा टैब को कॉपी करने के लिए Copy। यदि आपका JSON पार्स नहीं होता, या पाथ में सिंटैक्स त्रुटि है, तो स्टेटस लाइन ठीक-ठीक बता देती है कि क्या ग़लत है।
JSONPath सिंटैक्स
| सिंटैक्स | अर्थ | उदाहरण |
|---|---|---|
$ | डॉक्यूमेंट का रूट — हर पाथ यहीं से शुरू होता है। | $ |
.key or ['key'] | नाम से एक चाइल्ड प्रॉपर्टी। डॉट, स्पेस या हाइफ़न वाली कुंजियों के लिए ब्रैकेट इस्तेमाल करें। | $.store.bicycle.color |
* | वाइल्डकार्ड — किसी ऐरे का हर एलिमेंट या किसी ऑब्जेक्ट की हर वैल्यू। | $.store.book[*] |
.. | रिकर्सिव डिसेंट — उस नाम को मौजूदा नोड और हर वंशज में खोजें। | $..author |
[n] | ऐरे इंडेक्स (0 से शुरू)। ऋणात्मक अंत से गिनता है, इसलिए [-1] आख़िरी है। | $.store.book[2] |
[start:end:step] | ऐरे स्लाइस, Python-शैली। कोई भी भाग वैकल्पिक है; ऋणात्मक step उलट देता है। | $.store.book[0:2] |
[a,b] / ['x','y'] | यूनियन — एक ही चरण में कई इंडेक्स या नाम। | $.store.book[0,2] |
[?(expr)] | फ़िल्टर — केवल वही एलिमेंट रखें जहाँ एक्सप्रेशन सही हो। | $.store.book[?(@.price < 10)] |
फ़िल्टर एक्सप्रेशन [?( … )]
एक फ़िल्टर केवल वे एलिमेंट रखता है जिनके लिए इसका एक्सप्रेशन सही हो। फ़िल्टर के भीतर,
@ जाँचा जा रहा एलिमेंट है और $ पूरा डॉक्यूमेंट है, इसलिए आप किसी फ़ील्ड की
तुलना किसी स्थिरांक से या JSON में कहीं और की वैल्यू से कर सकते हैं:
| फ़िल्टर में | अर्थ | उदाहरण |
|---|---|---|
@ | जिस मौजूदा एलिमेंट की जाँच हो रही है। | @.price |
$ | डॉक्यूमेंट रूट (कहीं और की वैल्यू से तुलना करने के लिए)। | @.price < $.expensive |
== != | बराबर / बराबर नहीं (ढीली तुलना — 3 और "3" बराबर)। | @.category == 'fiction' |
< <= > >= | संख्यात्मक या स्ट्रिंग क्रम की तुलना। | @.price >= 8.99 |
=~ | रेगुलर-एक्सप्रेशन मैच — दायाँ पक्ष /pattern/flags होता है। | @.author =~ /^J/i |
&& || ! | शर्तें जोड़ें: and, or, not. | @.price < 10 && @.category == 'fiction' |
@.field (bare) | अस्तित्व जाँच — जब प्रॉपर्टी मौजूद हो तब सही। | @.isbn |
उदाहरण के लिए, $.store.book[?(@.price < 10)].title दस से कम कीमत वाली हर किताब के
शीर्षक लौटाता है, और $.store.book[?(@.price < $.expensive)] डॉक्यूमेंट के अपने
expensive थ्रेशोल्ड से सस्ती हर किताब लौटाता है।
हल किया गया उदाहरण
बुकस्टोर नमूना लोड होने पर, $..author रिकर्सिव डिसेंट के साथ पूरे डॉक्यूमेंट में घूमता है
और चारों लेखक लौटाता है। $.store.book[?(@.category == 'fiction')].title इसे तीन फ़िक्शन
शीर्षकों तक सीमित करता है, और $.store.book[-1:].title आख़िरी किताब लेने के लिए एक स्लाइस
इस्तेमाल करता है। हर परिणाम अपना कैननिकल ब्रैकेट-नोटेशन पाथ भी साथ रखता है — पहले लेखक के लिए वह
$['store']['book'][0]['author'] है — इसलिए आप हमेशा जानते हैं कि कोई वैल्यू ठीक कहाँ से आई।
यह एवैल्युएटर क्या समर्थन करता है (और यह सुरक्षित कैसे रहता है)
यह टूल सामान्य Goessner-शैली JSONPath लागू करता है: रूट, चाइल्ड (डॉट और ब्रैकेट), वाइल्डकार्ड,
रिकर्सिव डिसेंट, ऐरे इंडेक्स (ऋणात्मक सहित), Python-शैली स्लाइस, इंडेक्स या नाम के यूनियन, और तुलना,
तार्किक व regex ऑपरेटर वाले फ़िल्टर एक्सप्रेशन। कुछ लाइब्रेरियों के विपरीत, यह फ़िल्टर को एक छोटे
हाथ-से-लिखे इंटरप्रेटर से मूल्यांकित करता है और कभी eval() या
Function कंस्ट्रक्टर का उपयोग नहीं करता — इसलिए अविश्वसनीय JSON या जटिल फ़िल्टर
पेस्ट करना सुरक्षित है, और यह सख़्त Content-Security-Policy के तहत काम करता है। स्क्रिप्ट-शैली फ़िल्टर
(मनमाना JavaScript) समर्थित नहीं हैं, जो एक जानबूझकर लिया गया सुरक्षा निर्णय है।
सामान्य उपयोग
- बिना कोड लिखे किसी बड़ी API प्रतिक्रिया से एक विशिष्ट फ़ील्ड निकालें।
- Postman, Karate, REST-assured और CI टेस्ट सूट में इस्तेमाल होने वाले JSONPath assertions लिखें और डीबग करें।
$..*और रिकर्सिव डिसेंट के साथ किसी अपरिचित JSON पेलोड को खंगालें।- एक ही क्वेरी में किसी नेस्टेड डॉक्यूमेंट से हर कीमत, id या URL निकालें।
- किसी लॉग पाइपलाइन, कॉन्फ़िग फ़ाइल या ट्रांसफ़ॉर्म चरण के लिए पाथ एक्सप्रेशन का प्रोटोटाइप बनाएँ।
गोपनीयता
यह एवैल्युएटर पूरी तरह आपके अपने ब्राउज़र में चलता है — आपका JSON आपके ब्राउज़र में पार्स और क्वेरी होता है, कुछ भी अपलोड नहीं होता, कुछ भी लॉग नहीं होता, और कोई नेटवर्क अनुरोध नहीं होता। लोड होने के बाद यह ऑफ़लाइन काम करता रहता है।
अक्सर पूछे जाने वाले सवाल
- JSONPath क्या है?
- JSONPath, JSON के लिए एक क्वेरी भाषा है — भावना में XML के XPath जैसी। आप $.store.book[*].author जैसा एक पाथ एक्सप्रेशन लिखते हैं और यह डॉक्यूमेंट की हर वह वैल्यू लौटाता है जिसे पाथ चुनता है। इसका उपयोग बड़ी JSON प्रतिक्रियाओं से विशिष्ट वैल्यू निकालने, API टेस्ट में assertions लिखने, और लॉग प्रोसेसर व कॉन्फ़िगरेशन सिस्टम जैसे टूल के भीतर होता है। यह एवैल्युएटर व्यापक रूप से इस्तेमाल होने वाला Goessner सिंटैक्स लागू करता है — रूट ($), चाइल्ड (.name या ['name']), वाइल्डकार्ड (*), रिकर्सिव डिसेंट (..), ऐरे इंडेक्स व स्लाइस, यूनियन और फ़िल्टर एक्सप्रेशन।
- चाहे कितना भी गहराई में नेस्टेड हो, मैं कोई वैल्यू कैसे खोजूँ?
- रिकर्सिव डिसेंट — .. ऑपरेटर — का उपयोग करें। $..author डॉक्यूमेंट में कहीं भी, किसी भी गहराई पर, हर "author" प्रॉपर्टी लौटाता है, इसलिए आपको सटीक पाथ जानने की ज़रूरत नहीं। आप इसे अन्य चरणों के साथ जोड़ सकते हैं: $..book[0] हर "book" ऐरे का पहला एलिमेंट लेता है, और $..* पूरी संरचना की हर वैल्यू लौटाता है। किसी अपरिचित JSON पेलोड को खंगालने के लिए रिकर्सिव डिसेंट JSONPath की सबसे उपयोगी सुविधा है।
- कौन-से फ़िल्टर एक्सप्रेशन समर्थित हैं?
- फ़िल्टर [?( … )] में जाते हैं और हर एलिमेंट के विरुद्ध मूल्यांकित होते हैं, जहाँ @ मौजूदा एलिमेंट है और $ डॉक्यूमेंट रूट है। आप तुलना ऑपरेटर == != < <= > >= इस्तेमाल कर सकते हैं (उदाहरण @.price < 10 या @.category == 'fiction'), उन्हें && || से जोड़ सकते हैं और ! से नकार सकते हैं, किसी प्रॉपर्टी का नाम देकर उसके अस्तित्व की जाँच कर सकते हैं (@.isbn), =~ से एक रेगुलर एक्सप्रेशन मैच कर सकते हैं (@.author =~ /^J/i), और डॉक्यूमेंट में कहीं और की वैल्यू का संदर्भ दे सकते हैं (@.price < $.expensive)। @.meta.views जैसे नेस्टेड फ़ील्ड और @.tags[0] जैसे ऐरे इंडेक्स भी फ़िल्टर के भीतर काम करते हैं।
- यह JSON फ़ॉर्मैटर से किस तरह अलग है?
- एक JSON फ़ॉर्मैटर पूरे डॉक्यूमेंट को सुंदर-प्रिंट या मिनिफ़ाई करता है — यह बदलता है कि JSON कैसे दिखाया जाता है। इसके बजाय एक JSONPath एवैल्युएटर डेटा का एक उपसमूह निकालता है: आप इसे एक क्वेरी देते हैं और यह सिर्फ़ मैच होने वाली वैल्यू (और प्रत्येक तक का सटीक पाथ) लौटाता है। ये एक-दूसरे के पूरक हैं — बहुत-से लोग पढ़ने के लिए पहले अपने JSON को फ़ॉर्मैट करते हैं, फिर ठीक उन्हीं हिस्सों को निकालने के लिए एक JSONPath लिखते हैं जिनकी उन्हें ज़रूरत होती है। यह पेज उस पहले चरण के लिए हमारे JSON Formatter से लिंक करता है।
- परिणाम पाथ $['store']['book'][0] की तरह क्यों लिखे जाते हैं?
- हर मैच अपने सामान्यीकृत (कैननिकल) पाथ के साथ ब्रैकेट नोटेशन में रिपोर्ट किया जाता है। ब्रैकेट नोटेशन असंदिग्ध है — यह हर कुंजी के लिए काम करता है, उन कुंजियों सहित जिनमें स्पेस, डॉट या हाइफ़न हों और जिन्हें डॉट-नोटेशन व्यक्त नहीं कर सकता — इसलिए यह किसी अन्य टूल या कोड में वापस कॉपी करने के लिए सुरक्षित रूप है। उन प्रत्येक पाथ की वैल्यू Values टैब में दिखती है; Paths टैब बताता है कि हर मैच कहाँ से आया।
- क्या मेरा JSON अपलोड या संग्रहीत होता है?
- नहीं। यह एवैल्युएटर सादा JavaScript है जो आपके JSON को पूरी तरह आपके ब्राउज़र में पार्स और क्वेरी करता है — कोई नेटवर्क अनुरोध नहीं, कुछ भी लॉग नहीं होता, और डेटा कभी आपके डिवाइस से बाहर नहीं जाता। पेज लोड होने के बाद यह ऑफ़लाइन भी काम करता रहता है। यह eval() या Function कंस्ट्रक्टर का भी उपयोग नहीं करता: फ़िल्टर एक्सप्रेशन एक छोटे, सुरक्षित इंटरप्रेटर द्वारा पार्स होते हैं, इसलिए अविश्वसनीय JSON या जटिल फ़िल्टर पेस्ट करने से मनमाना कोड नहीं चल सकता।