JSON पथ निकालने वाला
JSON पेस्ट करें और मान निकालने के लिए $.store.book[0].title जैसी पथ अभिव्यक्ति दर्ज करें।
परिणाम
यह कैसे काम करता है
- अपना JSON पेस्ट करें: इनपुट फ़ील्ड में JSON ऑब्जेक्ट या ऐरे दर्ज करें।
- एक JSONPath अभिव्यक्ति दर्ज करें: $.store.book[*].author या $.users[?(@.age > 18)] जैसा पथ टाइप करें।
- निकाले गए परिणाम देखें: मेल खाने वाले मान तुरंत आउटपुट पैनल में दिखाई देते हैं। परिणाम कॉपी करें।
JSONPath एक्सट्रैक्टर क्यों इस्तेमाल करें?
जब आप जटिल API प्रतिक्रियाओं या गहराई से नेस्टेड JSON के साथ काम करते हैं, तो विशिष्ट मान हाथ से निकालना धीमा है।
विशेषताएँ
- पूर्ण JSONPath समर्थन: डॉट नोटेशन, ब्रैकेट नोटेशन, वाइल्डकार्ड (*), पुनरावर्ती अवरोहण (..), फ़िल्टर।
- लाइव मूल्यांकन: जब आप अपनी JSONPath अभिव्यक्ति टाइप करते हैं, परिणाम अपडेट होते हैं।
- फ़ॉर्मेट किया गया आउटपुट: निकाले गए मान सुंदर-फ़ॉर्मेट किए गए JSON के रूप में प्रदर्शित होते हैं।
- कई मिलान: JSON दस्तावेज़ से सभी मेल खाने वाले नोड लौटाता है।
- त्रुटि रिपोर्टिंग: जब पथ अभिव्यक्ति अमान्य हो या कोई मिलान न हो तो स्पष्ट संदेश।
अक्सर पूछे जाने वाले प्रश्न
JSONPath क्या है?
JSONPath JSON दस्तावेज़ों के लिए क्वेरी भाषा है, XML के लिए XPath के समान। $.users[*].name जैसा पथ name फ़ील्ड चुनता है।
किसी शर्त द्वारा ऐरे के तत्वों को कैसे फ़िल्टर करें?
फ़िल्टर अभिव्यक्ति का उपयोग करें: $.items[?(@.price < 50)] 50 से कम मूल्य वाले सभी आइटम लौटाता है। @ प्रतीक वर्तमान तत्व को संदर्भित करता है।
क्या यह पुनरावर्ती खोज का समर्थन करता है?
हाँ। .. ऑपरेटर सभी स्तरों पर पुनरावर्ती खोज करता है। उदाहरण: $..name सभी name कुंजियाँ खोजता है जहाँ भी वे हों।
एक ब्लॉग पोस्ट से RFC 9535 तक: JSONPath मानक की 17 साल की सड़क
Stefan Gössner ने फरवरी 2007 में एक एकल ब्लॉग पोस्ट में JSONPath का प्रस्ताव दिया, XPath विचार को JSON के लिए अनुकूलित करते हुए। उन्होंने एक संदर्भ JavaScript कार्यान्वयन प्रकाशित किया, सिंटैक्स का स्केच किया ($ रूट, डॉट और ब्रैकेट चाइल्ड ऑपरेटर, पुनरावर्ती अवतरण के लिए .., वाइल्डकार्ड के लिए *, ऐरे स्लाइसिंग के लिए [start:end:step], फ़िल्टर अभिव्यक्तियों के लिए [?(...)]) और व्यापक पारिस्थितिकी तंत्र इसके साथ चला। कार्यान्वयन फैल गए: JavaScript के लिए jsonpath, Java के लिए JsonPath, jq (Stephen Dolan, 2012) जो JSONPath-निकटवर्ती है लेकिन अपनी अलग चीज़ है, Python के लिए jsonpath-ng, JMESPath (AWS, 2014) एक सख्त प्रतिद्वंद्वी के रूप में। समस्या: हर कार्यान्वयन बहक गया। फ़िल्टर सिंटैक्स, पुनरावर्तन शब्दार्थ, regex मिलान, रूट पहचानकर्ता, सभी पुस्तकालयों में सूक्ष्म रूप से भिन्न। Carsten Bormann et al. द्वारा 2023 तुलनात्मक अध्ययन ने एक ही इनपुट के विरुद्ध 41 विभिन्न JSONPath कार्यान्वयनों का परीक्षण किया और एक ही अभिव्यक्ति के लिए 41 अलग-अलग परिणाम सेट प्राप्त किए। IETF JSONPath वर्किंग ग्रुप ने 2020 में इसे ठीक करने के लिए बुलाई। RFC 9535 «JSONPath: Query Expressions for JSON» फरवरी 2024 में प्रकाशित हुआ, JSONPath के लिए पहला औपचारिक मानक बन गया, Gössner की मूल पोस्ट के 17 साल बाद। RFC 9535 सिंटैक्स को कोडिफाई करता है, एक सामान्यीकृत आउटपुट प्रारूप परिभाषित करता है, स्ट्रिंग तुलनाओं के लिए यूनिकोड सामान्यीकरण की आवश्यकता रखता है, और एक अनुरूपता परीक्षण सूट जोड़ता है।
JSONPath सिंटैक्स चीट शीट
वे सात ऑपरेटर जो अधिकांश वास्तविक दुनिया के प्रश्नों को कवर करते हैं:
$रूट। हर पथ यहाँ से शुरू होता है। अकेले$पूरा दस्तावेज़ लौटाता है।.nameनाम से बच्चा।$.store.bookstoreके अंदरbookफ़ील्ड चुनता है। रिक्ति या विशेष वर्णों वाले नामों को ब्रैकेट नोटेशन की आवश्यकता होती है:$['book title']।[0]ऐरे इंडेक्स।$.book[0]पहला तत्व।$.book[-1]अंतिम तत्व (RFC 9535 जोड़)।[start:end:step]ऐरे स्लाइस। Python-शैली:$.book[1:3]तत्व 1 और 2,$.book[::2]हर दूसरा तत्व।stepउलटने के लिए नकारात्मक हो सकता है।*वाइल्डकार्ड।$.book[*].titleहर किताब का शीर्षक। संपत्ति वाइल्डकार्ड के रूप में भी काम करता है:$.store.*storeके सभी तत्काल बच्चे।..पुनरावर्ती अवतरण।$..titleकिसी भी गहराई पर हरtitleफ़ील्ड ढूंढता है। शक्तिशाली लेकिन बड़े दस्तावेज़ों पर धीमा।[?(...)]फ़िल्टर अभिव्यक्ति।$.book[?(@.price < 10)]सभी किताबें जहाँ कीमत 10 से कम है।@का अर्थ «वर्तमान तत्व» है। RFC 9535 इसे?नाम देता है और तुलना ऑपरेटर्स== != < <= > >=प्लस बूलियन&& ||मानकीकृत करता है। इस व्यूअर का त्वरित मोड फ़िल्टर अभिव्यक्तियों का मूल्यांकन नहीं करता, यदि आपको उनकी आवश्यकता है तोjsonpath-plusजैसी लाइब्रेरी का उपयोग करें।
जहाँ आप वास्तव में JSONPath तक पहुँचते हैं
- kubectl आउटपुट फ़िल्टरिंग।
kubectl get pods -o jsonpath='{.items[*].metadata.name}'Kubernetes में जहाज करता है और दैनिक उपयोग किया जाने वाला JSONPath उपभोक्ता है। Kubernetes संस्करण अग्रणी$को छोड़ देता है और कुछ विशिष्टताएँ हैं जिन्हें नोट करने योग्य है यदि आप उस पारिस्थितिकी तंत्र में रहते हैं। - Postman या Insomnia के साथ API परीक्षण।
pm.expect(jsonData.items[0].status).to.eql('active')जैसी परीक्षण assertions आमतौर पर अंडर द हुड JSONPath के रूप में व्यक्त की जाती हैं। - Grafana / observability डैशबोर्ड। JSON डेटास्रोत पैनल JSONPath का उपयोग करके मेट्रिक्स पर पूछताछ करते हैं; OpenTelemetry संग्रहकर्ता span विशेषताओं को निकालने के लिए JSONPath-समान सिंटैक्स का उपयोग करते हैं।
- त्वरित CLI निष्कर्षण। इस टूल को लाइव API एक्सप्लोरेशन के लिए
curl | jqके साथ जोड़ें: व्यूअर में पथ का प्रोटोटाइप बनाएं, फिर शेल स्क्रिप्ट के लिएjqसिंटैक्स में अनुवाद करें। (jq डॉट नोटेशन का उपयोग करता है लेकिन कड़ाई से JSONPath नहीं है।) - ETL और डेटा इंजीनियरिंग। Airflow XCom मैपिंग, dbt seed फ़ाइलें, और SQL JSON कॉलम निष्कर्षण सभी नेस्टेड पेलोड तक पहुँचने के लिए JSONPath-समान अभिव्यक्तियों का उपयोग करते हैं।
- टोकन निरीक्षण। डिकोडेड JWT में ड्रिल करें:
$.payload.issजारीकर्ता के लिए,$..roles[*]claim ट्री में कहीं भी प्रदान की गई हर भूमिका के लिए। - वेबहुक हैंडलर डिज़ाइन। हैंडलर कोड लिखने से पहले, एक वास्तविक वेबहुक पेलोड पेस्ट करें और उन पथों का प्रोटोटाइप बनाएं जो आपके सिस्टम की परवाह करने वाले फ़ील्ड्स को बाहर निकालते हैं। अपस्ट्रीम सेवा के साथ एक राउंड-ट्रिप बचाता है।
गलतियाँ जो काटती हैं
- कार्यान्वयन बहाव। एक पथ जो एक लाइब्रेरी में काम करता है, दूसरे में अलग परिणाम या कोई परिणाम नहीं उत्पन्न कर सकता है। RFC 9535 से पहले कुछ भी मानकीकृत नहीं था। अब अपनी लाइब्रेरी के डॉक्स में «RFC 9535 अनुरूप» खोजें (IETF परीक्षण सूट RFC के साथ प्रकाशित होता है)।
- फ़िल्टर उद्धरण।
$.book[?(@.title=="Foo")]को RFC 9535 में फ़िल्टर के अंदर डबल कोट्स की आवश्यकता होती है; कई पुरानी लाइब्रेरीज़ सिंगल कोट्स'Foo'भी स्वीकार करती हैं। उन्हें मिलाना उत्पादन में «सिंटैक्स त्रुटि» का एक सामान्य कारण है। - पुनरावर्ती अवतरण लालची है।
$..*दस्तावेज़ में हर मान लौटाता है, जिसमें नेस्टेड ऑब्जेक्ट्स और ऐरे स्वयं शामिल हैं, केवल पत्ते नहीं। बड़े दस्तावेज़ों पर इसमें सेकंड लग सकते हैं। पहले पथ को संकीर्ण करें, फिर उतरें। - पूर्णांक-बनाम-स्ट्रिंग कुंजी। JSON में केवल स्ट्रिंग कुंजियाँ होती हैं, भले ही वे संख्यात्मक दिखें।
$.users.123और$.users[123]का कुछ लाइब्रेरीज़ में अलग-अलग अर्थ है: पहला शाब्दिक रूप से"123"नामक एक संपत्ति की तलाश करता है, दूसरे को ऐरे इंडेक्स 123 के रूप में व्याख्या किया जा सकता है। - नकारात्मक स्लाइस।
$.book[-1:]का अर्थ RFC 9535 और अधिकांश कार्यान्वयनों में «अंतिम तत्व» है, लेकिन 2024 से पहले कुछ लाइब्रेरीज़ नकारात्मक सूचकांकों को त्रुटियों के रूप में मानती थीं। यदि आप पुराने पार्सर्स को लक्षित करते हैं, तो पूर्ण सूचकांकों का उपयोग करें। $भूलना। अग्रणी$के बिना एक पथ RFC 9535 में अमान्य है। कुछ कार्यान्वयन शॉर्टहैंड के रूप में.store.bookस्वीकार करते हैं, अन्य इसे अस्वीकार करते हैं। हमेशा$के साथ उपसर्ग करें।- प्रदर्शन। 10 MB दस्तावेज़ पर पुनरावर्ती अवतरण
..मिलान प्रति O(n) हो सकता है। डेटा वेयरहाउस कॉलम या हॉट लूप के लिए,$..के साथ एक बार पूर्व-निष्कर्षण करें, परिणाम कैश करें, फिर कैश किए गए ऐरे को चलें। हर अनुरोध पर एक जटिल JSONPath कभी न चलाएं।
JSONPath vs jq vs JMESPath vs JSON Pointer
- JSONPath (RFC 9535)। तदर्थ प्रश्नों और कॉन्फ़िगरेशन फ़ाइलों के लिए सर्वोत्तम। सिंटैक्स XPath से परिचित है, मानक ताज़ा है, कई भाषा लाइब्रेरीज़ इसका समर्थन करती हैं।
- jq। एक पूर्ण डेटा परिवर्तन भाषा, न कि केवल एक पथ क्वेरी। map/filter/reduce, स्ट्रिंग फ़ंक्शन, गणित, स्वरूपण जोड़ता है। बेहतर जब आपको डेटा को नए सिरे से आकार देने की आवश्यकता हो, केवल निकालने की नहीं। डॉट नोटेशन के साथ अपना सिंटैक्स है लेकिन फ़िल्टर स्तर पर JSONPath से विचलित होता है।
- JMESPath। 2014 का एक विकल्प जो AWS CLI द्वारा उपयोग किया जाता है (
aws ec2 describe-instances --query "...")। JSONPath से अधिक सख्त और कार्यात्मक, पहले दिन से एक वास्तविक व्याकरण है, प्रक्षेपण और पाइप ऑपरेटर्स का समर्थन करता है। अमेज़ॅन के पारिस्थितिकी तंत्र के बाहर कम सामान्य। - JSON Pointer (RFC 6901)। एकल मान को संबोधित करने के लिए 2013 का एक मानक:
/store/book/0/title। वाइल्डकार्ड, फ़िल्टर, या पुनरावर्तन नहीं कर सकता। JSON Patch (RFC 6902), JSON Schema$ref, और Kubernetes patch API द्वारा उपयोग किया जाता है। इसे तब चुनें जब आपको सटीक-पता संकेत की आवश्यकता हो, क्वेरी की नहीं।
अधिक अक्सर पूछे जाने वाले प्रश्न
क्या JSONPath XPath के समान है?
इससे प्रेरित, समान नहीं। XPath को XML के लिए W3C द्वारा 1999 में अंतिम रूप दिया गया, JSONPath को Gössner ने 2007 में स्केच किया, JSON के लिए वही विचार लाने के लिए। सबसे बड़े अंतर: JSONPath / के बजाय . और [] का उपयोग करता है, JSONPath में XML नेमस्पेस या विशेषताओं की कोई अवधारणा नहीं है, JSONPath बहुत बाद में मानकीकृत हुआ (2024 बनाम 1999), इसलिए वर्षों तक यह कई असंगत कार्यान्वयनों के साथ एक डी-फैक्टो सिंटैक्स था।
एक ही JSONPath अलग-अलग टूल्स में अलग-अलग परिणाम क्यों देता है?
क्योंकि JSONPath को RFC 9535 (फरवरी 2024) तक मानकीकृत नहीं किया गया था। उससे पहले, हर कार्यान्वयन फ़िल्टर सिंटैक्स, regex समर्थन, रूट पहचानकर्ता, एस्केप नियम, और एज केस (खाली ऐरे, गुम कुंजी, फ़िल्टर में टाइप कोएर्शन) के बारे में अपने स्वयं के विकल्प बनाता था। 2023 के IETF वर्किंग-ग्रुप अध्ययन ने एक ही इनपुट पर 41 कार्यान्वयनों का परीक्षण किया और 41 अलग-अलग परिणाम सेट प्राप्त किए। RFC 9535 इसे नई और अपडेट की गई लाइब्रेरीज़ के लिए ठीक करता है; पुरानी लाइब्रेरीज़ तब तक विचलित होंगी जब तक वे माइग्रेट नहीं हो जातीं। हमेशा जाँचें कि क्या आपकी लाइब्रेरी «RFC 9535 अनुरूपता» का दावा करती है।
क्या मैं JSONPath के साथ JSON को संशोधित कर सकता हूँ, या केवल पढ़ सकता हूँ?
RFC 9535 JSONPath को सख्ती से एक क्वेरी भाषा के रूप में परिभाषित करता है: यह एक दस्तावेज़ से मान लौटाता है, यह म्यूट नहीं करता है। JSON को संशोधित करने के लिए, JSON Patch (RFC 6902) का उपयोग करें, जो JSON Pointer पथ और add/remove/replace/copy/move/test ऑपरेशन का उपयोग करता है। कुछ लाइब्रेरीज़ दोनों को जोड़ती हैं (जैसे JavaScript में jsonpath-plus में apply() म्यूटेशन एक्सटेंशन है) लेकिन यह मानक JSONPath नहीं है।
क्या JSONPath फ़िल्टर में रेगुलर एक्सप्रेशन का समर्थन करता है?
RFC 9535 ने दो regex फ़ंक्शन जोड़े: match(node, regex) पूरे स्ट्रिंग से मिलता है, search(node, regex) किसी भी सबस्ट्रिंग से मिलता है। उदाहरण: $.book[?(match(@.isbn, "^978-"))]। regex फ्लेवर I-Regexp है (RFC 9485, XML Schema regex का एक प्रोफ़ाइल), PCRE या JavaScript regex नहीं। पुरानी लाइब्रेरीज़ अपनी होस्ट भाषा के regex फ्लेवर का उपयोग करती थीं, जो regex क्वेरीज़ को विशेष रूप से गैर-पोर्टेबल बनाता है।
जब मैं इस टूल का उपयोग करता हूँ तो क्या मेरा JSON कहीं भेजा जाता है?
नहीं। पथ मूल्यांकन पूरी तरह से आपके ब्राउज़र के JavaScript इंजन में चलता है। DevTools में नेटवर्क टैब खोलें और एक क्वेरी चलाएं, आप मूल्यांकन के दौरान शून्य आउटबाउंड अनुरोध देखेंगे। रहस्यों के साथ API प्रतिक्रियाओं, PII के साथ डेटाबेस डंप, या क्रेडेंशियल्स वाले कॉन्फ़िगरेशन फ़ाइलों के लिए सुरक्षित।