Skip to main content
CheckTown
डेव टूल

JSONPath: JSON दस्तावेज़ों से डेटा निकालने के लिए क्वेरी भाषा

प्रकाशित 7 मिनट का पठन
इस लेख में

JSONPath क्या है?

JSONPath एक क्वेरी भाषा है जो JSON दस्तावेज़ों से डेटा निकालने के लिए इस्तेमाल होती है। जैसे XPath, XML दस्तावेज़ों में नेविगेट करती है, वैसे ही JSONPath एक संक्षिप्त एक्सप्रेशन सिंटैक्स के ज़रिए JSON संरचनाओं में नेविगेट करती है। वर्षों तक अनौपचारिक विनिर्देश रहने के बाद, इसे RFC 9535 (फरवरी 2024) में औपचारिक रूप दिया गया।

JSONPath एक्सप्रेशन $ (रूट एलिमेंट) से शुरू होते हैं और दस्तावेज़ में घूमने के लिए डॉट नोटेशन या ब्रैकेट नोटेशन का उपयोग करते हैं। यह भाषा वाइल्डकार्ड, रिकर्सिव डिसेंट, ऐरे स्लाइसिंग और फ़िल्टर एक्सप्रेशन का समर्थन करती है — जिससे एक ही एक्सप्रेशन में गहराई से नेस्टेड मानों को निकालना संभव हो जाता है।

JSONPath सिंटैक्स

JSONPath, JSON संरचनाओं में नेविगेट करने और उन्हें फ़िल्टर करने के लिए कई ऑपरेटर प्रदान करती है।

  • रूट ($) — हर JSONPath एक्सप्रेशन $ से शुरू होता है, जो JSON दस्तावेज़ के रूट ऑब्जेक्ट या ऐरे को दर्शाता है
  • डॉट नोटेशन ($.store.book) — चाइल्ड प्रॉपर्टीज़ को नाम से एक्सेस करें, जैसे JavaScript में ऑब्जेक्ट एक्सेस होता है। डॉट, नेस्टिंग के हर स्तर को अलग करते हैं।
  • ब्रैकेट नोटेशन ($['store']['book']) — ब्रैकेट में उद्धृत प्रॉपर्टी नामों का उपयोग करने वाला वैकल्पिक सिंटैक्स। जब प्रॉपर्टी नामों में विशेष अक्षर या स्पेस हों, तो यह ज़रूरी होता है।
  • वाइल्डकार्ड (*) — मौजूदा स्तर के सभी एलिमेंट से मेल खाता है। $.store.*, store के सभी सीधे चाइल्ड लौटाता है; $[*] एक रूट ऐरे के सभी एलिमेंट लौटाता है।
  • रिकर्सिव डिसेंट (..) — किसी भी गहराई पर मौजूद सभी वंशजों में खोज करता है। $..price दस्तावेज़ में कहीं भी, किसी भी नेस्टिंग स्तर पर मौजूद हर 'price' फ़ील्ड को खोज लेता है।
  • ऐरे स्लाइस ([start:end:step]) — ऐरे एलिमेंट की एक रेंज चुनें। $[0:3] पहले तीन एलिमेंट लौटाता है; $[-2:] आखिरी दो लौटाता है; $[::2] हर दूसरा एलिमेंट लौटाता है।

JSONPath एक्सप्रेशन के उदाहरण

यहाँ व्यावहारिक उदाहरण दिए गए हैं जो दिखाते हैं कि JSONPath एक्सप्रेशन वास्तविक JSON संरचनाओं से डेटा कैसे निकालते हैं।

  • नेस्टेड मान निकालना — $.users[0].name पहले उपयोगकर्ता का नाम लाता है। $.config.database.host गहराई से नेस्टेड एक कॉन्फ़िगरेशन मान प्राप्त करता है।
  • ऐरे फ़िल्टर करना — $.users[?(@.age > 18)] 18 से अधिक उम्र वाले सभी उपयोगकर्ता लौटाता है। $.products[?(@.price < 50)] किफ़ायती उत्पाद ढूँढ़ता है। फ़िल्टर मौजूदा एलिमेंट को संदर्भित करने के लिए @ का उपयोग करते हैं।
  • बहु-स्तरीय क्वेरी — $..author किसी भी गहराई पर हर author फ़ील्ड लौटाता है। $.store.book[*].title सभी किताबों के शीर्षक लौटाता है। $.orders[*].items[*].sku सभी ऑर्डर और आइटम में मौजूद SKU निकालता है।

इन एक्सप्रेशन को मिलाकर शक्तिशाली क्वेरी बनाई जा सकती हैं। उदाहरण के लिए, $.store.book[?(@.price < 10)].title, 10 से सस्ती सभी किताबों के शीर्षक लौटाता है।

निःशुल्क आज़माएँ — कोई साइनअप आवश्यक नहीं

JSONPath एक्सप्रेशन टेस्ट करें →

आम उपयोग के मामले

JSONPath का उपयोग वहाँ किया जाता है जहाँ भी JSON दस्तावेज़ों से संरचित डेटा को क्वेरी या निकालने की ज़रूरत हो।

  • API रिस्पॉन्स से डेटा निकालना — कस्टम पार्सिंग कोड लिखे बिना जटिल API रिस्पॉन्स से विशिष्ट फ़ील्ड खींचें। कोडिंग से पहले सैंपल रिस्पॉन्स पर एक्सप्रेशन टेस्ट करें।
  • कॉन्फ़िगरेशन पार्सिंग — CI/CD पाइपलाइन, डिप्लॉयमेंट स्क्रिप्ट और इन्फ्रास्ट्रक्चर-एज़-कोड टूल में JSON कॉन्फ़िगरेशन फ़ाइलों से मान निकालें
  • लॉग विश्लेषण — बड़ी लॉग फ़ाइलों में विशिष्ट घटनाएँ, त्रुटि पैटर्न या प्रदर्शन मेट्रिक्स ढूँढ़ने के लिए संरचित JSON लॉग को क्वेरी करें
  • डेटा परिवर्तन — इम्पोर्ट/एक्सपोर्ट के दौरान JSON डेटा को चुनने, फ़िल्टर करने और नया आकार देने के लिए ETL पाइपलाइन में JSONPath का उपयोग करें

JSONPath बनाम JQ बनाम JMESPath

कई क्वेरी भाषाएँ JSON दस्तावेज़ों को लक्ष्य बनाती हैं। हर एक की अपनी खूबियाँ और इकोसिस्टम समर्थन होता है।

  • JSONPath — मानक क्वेरी सिंटैक्स (RFC 9535), प्रोग्रामिंग लाइब्रेरीज़ (Java, Python, JavaScript, PHP) में व्यापक रूप से समर्थित। सरल एक्सट्रैक्शन और फ़िल्टरिंग के लिए सर्वोत्तम। इसमें कोई अंतर्निहित परिवर्तन सुविधा नहीं है।
  • JQ — एक शक्तिशाली फ़ंक्शनल भाषा वाला कमांड-लाइन JSON प्रोसेसर। परिवर्तन, गणना और आउटपुट फ़ॉर्मेटिंग का समर्थन करता है। शेल स्क्रिप्टिंग और कमांड-लाइन डेटा प्रोसेसिंग के लिए सर्वोत्तम।
  • JMESPath — AWS CLI और Boto3 द्वारा इस्तेमाल की जाने वाली क्वेरी भाषा। JSONPath से सख़्त सिंटैक्स और अंतर्निहित फ़ंक्शन के साथ। AWS इकोसिस्टम इंटीग्रेशन और प्रोग्रामेटिक क्वेरींग के लिए सर्वोत्तम।

अक्सर पूछे जाने वाले सवाल

क्या JSONPath शून्य-आधारित या एक-आधारित ऐरे इंडेक्सिंग का उपयोग करता है?

JSONPath शून्य-आधारित ऐरे इंडेक्सिंग का उपयोग करता है, जो अधिकांश प्रोग्रामिंग भाषाओं के अनुरूप है। $[0] पहला एलिमेंट लौटाता है, $[1] दूसरा, और इसी तरह आगे। ऋणात्मक इंडेक्स अंत से गिनती करते हैं: $[-1] आखिरी एलिमेंट लौटाता है, $[-2] अंतिम से दूसरा।

JSONPath में फ़िल्टर एक्सप्रेशन कैसे काम करते हैं?

फ़िल्टर एक्सप्रेशन [?(expression)] सिंटैक्स का उपयोग करते हैं, जहाँ @ मूल्यांकित किए जा रहे मौजूदा एलिमेंट को संदर्भित करता है। आप तुलना ऑपरेटर (==, !=, <, >, <=, >=), लॉजिकल ऑपरेटर (&& और ||) और प्रॉपर्टी एक्सेस (जैसे, @.name) का उपयोग कर सकते हैं। उदाहरण: $[?(@.status == 'active')] उन एलिमेंट को लौटाता है जहाँ status 'active' के बराबर हो।

क्या सभी JSONPath कार्यान्वयन आपस में संगत हैं?

पूरी तरह नहीं। RFC 9535 (2024) से पहले, JSONPath का कोई औपचारिक मानक नहीं था और कार्यान्वयन अलग-अलग होते थे। सामान्य अंतरों में फ़िल्टर एक्सप्रेशन सिंटैक्स, रिकर्सिव डिसेंट व्यवहार और गुम प्रॉपर्टीज़ को संभालने का तरीका शामिल है। RFC 9535 का लक्ष्य व्यवहार को मानकीकृत करना है, लेकिन पुरानी लाइब्रेरीज़ अब भी अलग-अलग परंपराओं का पालन कर सकती हैं। हमेशा अपने विशिष्ट कार्यान्वयन पर एक्सप्रेशन टेस्ट करें।

संबंधित टूल