JSONPath क्या है?
JSONPath एक क्वेरी भाषा है जो JSON दस्तावेज़ के अंदर वैल्यू चुनती है, जैसे XPath XML में नोड चुनता है: $.store.book[*].author हर लेखक को चुनता है। 2024 में RFC 9535 ने इसे मानकीकृत किया और उन फ़िल्टरों का सिंटैक्स व अर्थ तय किया जिन पर पुराने इम्प्लीमेंटेशन असहमत थे।
JSON Path टेस्टर कैसे इस्तेमाल करें
- JSON डॉक्यूमेंट पेस्ट करें।
- कोई JSONPath एक्सप्रेशन टाइप करें, जैसे $.store.book[?(@.price < 10)].title।
- मैच देखें; वैल्यू या पाथ कॉपी करें।
JSON Path टेस्टर की खूबियाँ
- मूल (RFC 9535 से पहले का) JSONPath सिंटैक्स: डॉट/ब्रैकेट एक्सेस, वाइल्डकार्ड, रिकर्सिव डिसेंट, स्लाइस, यूनियन और कोष्ठक वाले फ़िल्टर
- तुलना, regex (=~), in / nin, अंकगणित और बूलियन लॉजिक वाले फ़िल्टर एक्सप्रेशन
- सुरक्षित मूल्यांकन — कोई eval() नहीं, एक्सप्रेशन को AST में पार्स किया जाता है
- नतीजे तालिका (पाथ, टाइप, वैल्यू), वैल्यू के JSON ऐरे और मैच के पाथ की सूची के रूप में
- एक्सप्रेशन या डॉक्यूमेंट एडिट करते ही लाइव मूल्यांकन
- समस्या की ओर इशारा करते आसान सिंटैक्स एरर
JSON Path टेस्टर का उदाहरण
सस्ती किताबें ढूँढ़ना
इनपुट:
$.store.book[?(@.price < 10)].titleआउटपुट:
$.store.book[0].title "Sayings of the Century"
$.store.book[2].title "Moby Dick"@ बारी-बारी से हर किताब है, इसलिए 4 में से सिर्फ़ 2 किताबें .title तक पहुँचती हैं।- 1
$रूट: पूरा डॉक्यूमेंट, 1 नोड - 2
.storeउस नोड का childstore: 1 ऑब्जेक्ट$.store - 3
.bookchildbook: 4 किताबों वाला 1 ऐरे$.store.book - 4
[?(@.price < 10)]कोष्ठक वाला फ़िल्टर:[?(…)]हर किताब को जाँचता है;@वही किताब है जो जाँची जा रही है। बचीं:book[0]8.95,book[2]8.99$.store.book[0] $.store.book[2]शाखा: हटाई गईं:
book[1]12.99,book[3]22.99 - 5
.titleबची हर किताब का childtitle: 2 स्ट्रिंग$.store.book[0].title $.store.book[2].title
इसके बाद:2 मैच: "Sayings of the Century" और "Moby Dick"
ऊपर वाले उदाहरण का एक्सप्रेशन, टूल के सैंपल डॉक्यूमेंट ("उदाहरण लोड करें") पर। स्टेप 2–5 के नीचे: हर स्टेप के लौटाए पाथ।
JSON Path टेस्टर के बारे में अक्सर पूछे जाने वाले सवाल
JSONPath की कौन-सी सुविधाएँ समर्थित हैं?
टूल वही मूल JSONPath सिंटैक्स अपनाता है जो RFC 9535 (2024) से पहले ज़्यादातर लाइब्रेरियाँ इस्तेमाल करती थीं: डॉट और ब्रैकेट नोटेशन, वाइल्डकार्ड (*), रिकर्सिव डिसेंट (..), ऋणात्मक सहित ऐरे इंडेक्स, स्लाइस [start:end:step], यूनियन [0,2] और ["a","b"], फ़िल्टर [?(…)] तथा (@.length-1) वाला स्क्रिप्ट रूप। RFC 9535 के जो रूप इससे अलग हैं, वे स्वीकार नहीं होते: फ़िल्टर में कोष्ठक ज़रूरी हैं ([?(@.price < 10)], न कि [?@.price < 10]) और length(), count(), match(), search() व value() फ़ंक्शन उपलब्ध नहीं हैं।
फ़िल्टर के भीतर क्या लिख सकता हूँ?
तुलनाएँ (==, !=, <, <=, >, >=), रेगुलर एक्सप्रेशन (@.name =~ /^a/i), सदस्यता (@.tag in ["a","b"]), अस्तित्व (@.isbn), अंकगणितीय और तार्किक ऑपरेटर (&&, ||, !)। रूट ($) के संदर्भ भी मान्य हैं। =~, in, nin और contains ऑपरेटर पुरानी लाइब्रेरियों के एक्सटेंशन हैं, RFC 9535 सिंटैक्स का हिस्सा नहीं।
क्या फ़िल्टर चलाना सुरक्षित है?
हाँ। एक्सप्रेशन एक छोटे AST में पार्स होते हैं और टूल खुद उनका मूल्यांकन करता है — कभी eval() या Function() इस्तेमाल नहीं होता, इसलिए मनमाना कोड नहीं चल सकता।
हर मैच के लिए कौन-सा पाथ दिखता है?
डॉट/ब्रैकेट नोटेशन में मैच की विशिष्ट जगह, उदाहरण के लिए $.store.book[2].title। टेस्ट या डॉक्युमेंटेशन में वैल्यू का सटीक संदर्भ देने के लिए इसका इस्तेमाल करें। यह RFC 9535 का "Normalized Path" नहीं है, जिसमें सिर्फ़ ब्रैकेट और सिंगल कोट में लिखे नाम होते हैं: $['store']['book'][2]['title']।
तकनीकी नोट्स
पाथ को सेगमेंट (child, wildcard, index, slice, union, filter, script) में टोकनाइज़ किया जाता है। फ़िल्टर एक छोटे एक्सप्रेशन ट्री में कंपाइल होते हैं जो ==, !=, <, <=, >, >=, =~, in, nin, contains, &&, ||, !, यूनरी माइनस और + − * / % का समर्थन करता है। अलग-अलग टाइप के बीच तुलना false देती है, जो लोकप्रिय JSONPath लाइब्रेरियों के व्यवहार जैसा ही है।
संदर्भ
- RFC 9535: JSONPath: Query Expressions for JSONमानक JSONPath सिंटैक्स — रूट, चाइल्ड, डिसेंडेंट, वाइल्डकार्ड और फ़िल्टर सिलेक्टर — और क्वेरी का मूल्यांकन।
- RFC 8259: The JavaScript Object Notation (JSON) Data Interchange FormatJSON का व्याकरण: ऑब्जेक्ट, ऐरे, स्ट्रिंग, नंबर, तीन लिटरल और इंटरचेंज एन्कोडिंग के रूप में UTF-8।