JSONPath क्वेरी
JSONJSON दस्तावेज़ पर JSONPath / jq-शैली क्वेरी चलाएँ और प्रत्येक मिलान को हाइलाइट करें।
दूरस्थ URL लाए नहीं जाते; अपना JSON सीधे पेस्ट करें।
इस पृष्ठ पर
JSONPath टेस्टर क्या है?#
जब कोई JSON दस्तावेज़ छोटा होता है, तो आप उसे आँखों से पढ़ते हैं। जब वह कुछ हज़ार पंक्तियों का होता है — एक API रिस्पॉन्स, एक कॉन्फ़िग डंप, एक डिपेंडेंसी ट्री — तो आपकी आँखें सही औज़ार बनना बंद कर देती हैं। JSONPath उस स्थिति के लिए क्वेरी भाषा है: एक संक्षिप्त एक्सप्रेशन जो कहता है “मुझे हर price फ़ील्ड दें”, या “10 से सस्ती किताबों के शीर्षक”, या “हर वह नोड जिसका नाम isbn है, चाहे वह कितने गहरा दफ़न हो”।
इसे एक फ़ाइल पाथ और एक छोटे फ़िल्टर भाषा के बीच का मिश्रण समझें। $.store.book[0].title किसी ज्ञात संरचना से नीचे की ओर वैसे ही चलता है जैसे कोई फ़ाइलसिस्टम पाथ। $..author कहता है “पुनरावर्ती रूप से नीचे उतरें और हर author जो मिले उसे इकट्ठा करें”। [?(@.price < 10)] एक फ़िल्टर है: केवल वे एलिमेंट्स रखें जहाँ मौजूदा नोड का price दस से कम है। @ हमेशा “वह नोड जिसे मैं अभी देख रहा हूँ” का मतलब है।
यह पेज एक JSONPath एक्सप्रेशन को आपके JSON पर चलाता है, हर मैच को सूचीबद्ध करता है, और — जो हिस्सा सबसे ज़्यादा समय बचाता है — मैच किए गए रेंज को सीधे फ़ॉर्मेट किए गए दस्तावेज़ पर हाइलाइट करता है ताकि आप एक नज़र में देख सकें कि आपका एक्सप्रेशन वही चुनता है जिसे आप सोचते हैं। फ़िल्टर एक सुरक्षित एक्सप्रेशन पार्सर से मूल्यांकन किए जाते हैं, कभी कोड चलाकर नहीं, इसलिए कोई अविश्वसनीय ढेर कुछ भी नहीं चला सकता।
इसका उपयोग कैसे करें#
- अपना JSON बाईं ओर इनपुट पैनल में चिपकाएँ, या क्लासिक बुकस्टोर फ़िक्स्चर लोड करने के लिए नमूना पर क्लिक करें।
- दाईं ओर JSONPath फ़ील्ड में कोई JSONPath एक्सप्रेशन टाइप करें। आम शुरुआती बिंदु:
$.store.book[*].author— हर ऐरे एलिमेंट काauthor।$..author— पुनरावर्ती अवतरण: हरauthor, कहीं भी।$.store.book[?(@.price < 10)].title— एक फ़िल्टर एक्सप्रेशन।$.store.book[?(@.isbn)].isbn— एक अस्तित्व परीक्षण (isbnकुंजी है)।
- फ़ील्ड के नीचे मैचों की सूची हर परिणाम के लिए एक प्रविष्टि से भर जाती है, और नीचे फुल-विड्थ JSON पूर्वावलोकन हर मैच किए गए स्पैन को जगह पर हाइलाइट करता है।
- मैचों के बगल का हेडर गणना दिखाता है। एक ऐसा एक्सप्रेशन जो ज़ीरो नोड्स से मेल खाता है वह अभी भी सफलता (खाली सूची) रिपोर्ट करता है — केवल एक सिंटैक्सियली टूटा हुआ एक्सप्रेशन त्रुटि दिखाता है।
- मैच किए गए वैल्यूज़ को एक JSON ऐरे के रूप में लेने के लिए टूलबार पर मैच कॉपी करें, या दोनों पैनलों को रीसेट करने के लिए साफ़ करें।
क्वेरी आप टाइप करते ही फ़ायर होती हैं। यदि JSON खुद अमान्य है, तो स्थिति पट्टी ठीक करने के लिए सटीक पंक्ति और स्तंभ की ओर इशारा करती है।
प्रमुख विशेषताएँ#
- जगह पर हाइलाइटिंग। हर मैच किया गया वैल्यू फ़ॉर्मेट किए गए दस्तावेज़ पर ओवरले किया जाता है, इसलिए एक पुनरावर्ती
$..जो तीस नोड्स पकड़ता है वह तुरंत दृश्य हो जाता है बजाय किसी सूची में दफ़न होने के। - सुरक्षित फ़िल्टर मूल्यांकन।
[?(@.price < 10)]जैसे एक्सप्रेशन एक एक्सप्रेशन मूल्यांकक द्वारा पार्स किए जाते हैं, डायनामिक कोड निष्पादन को नहीं सौंपे जाते — पेज दुर्भावनापूर्ण इनपुट पर भी CSP-सुरक्षित रहता है। - विशिष्ट “कोई मैच नहीं” बनाम “त्रुटि”। एक वैध एक्सप्रेशन जो कुछ नहीं चुनता वह ज़ीरो मैच के रूप में रिपोर्ट किया जाता है; केवल एक विकृत एक्सप्रेशन को त्रुटि के रूप में चिह्नित किया जाता है। आप कभी “कुछ नहीं मिला” को “टूट गया” से भ्रमित नहीं करते।
- प्रति-मैच पॉइंटर। हर परिणाम अपना JSON Pointer रखता है (जैसे
/store/book/2/title), इसलिए आप सटीक रूप से जानते हैं कि ट्री में कोई वैल्यू कहाँ से आया। - ऐरे के रूप में कॉपी। मैच किए गए वैल्यूज़ एक साफ़ JSON ऐरे के रूप में एक्सपोर्ट होते हैं, अगले चरण में पाइप करने के लिए तैयार।
- केवल स्थानीय। आपका डेटा ब्राउज़र में क्वेरी होता है। न कोई बैकएंड है और न कोई अपलोड।
कार्य उदाहरण#
नमूना लोड करें, फिर एक फ़िल्टर चलाएँ जो सस्ती किताबों के शीर्षक ढूँढता है। JSONPath फ़ील्ड में यह दर्ज करें:
$.store.book[?(@.price < 10)].title
मैचों की सूची दो शीर्षक लौटाती है, क्योंकि फ़िक्स्चर की चार में से केवल दो किताबें 10 से कम कीमत की हैं:
[
"Sayings of the Century",
"Moby Dick"
]
JSON पूर्वावलोकन उन दो title वैल्यूज़ को जगह पर हाइलाइट करता है, और आप देख सकते हैं कि बाकी दो को क्यों बाहर रखा गया — Sword of Honour (12.99) और The Lord of the Rings (22.99) सीमा से ऊपर बैठते हैं। यह जानने के लिए कि किन किताबों के पास ISBN है, एक अस्तित्व परीक्षण पर स्विच करें:
$.store.book[?(@.isbn)].isbn
वह दो ISBN स्ट्रिंग्स और कुछ नहीं लौटाता, क्योंकि फ़िल्टर केवल उन एलिमेंट्स को रखता है जिनके पास वास्तव में isbn कुंजी है — “कौन से रिकॉर्ड्स से कोई फ़ील्ड गायब है” यह ढूँढने का एक आसान पैटर्न, इसे नकारकर के।
अक्सर पूछे जाने वाले प्रश्न#
$ और @ में क्या अंतर है?#
$ दस्तावेज़ का रूट है — वह पूरा JSON वैल्यू जो आपने चिपकाया। @ एक फ़िल्टर के अंदर विचाराधीन मौजूदा नोड है। तो [?(@.price < 10)] में, @ उस किताब को संदर्भित करता है जिसे फ़िल्टर अभी जाँच रहा है; वहाँ $.price लिखना वापस रूट पर कूदता और एक टॉप-लेवल price ढूँढता जो मौजूद ही नहीं।
मेरा एक्सप्रेशन कुछ नहीं मैच करता। क्या वह कोई बग है?#
शायद नहीं। एक वैध एक्सप्रेशन जो ज़ीरो नोड्स चुनता है वह खाली परिणाम के साथ एक सफल क्वेरी है — जैसे नमूने पर $.store.book[?(@.price > 1000)] का मतलब सोचा जाए तो बस यही है कि कोई किताब इतनी महँगी नहीं है। हेडर बिना किसी त्रुटि के “0 मैच” पढ़ता है। केवल जब एक्सप्रेशन खुद अपार्सेबल हो तभी पेज त्रुटि रिपोर्ट करता है।
फ़िल्टर कोई मनमाना JavaScript क्यों नहीं चलाता?#
फ़िल्टर एक समर्पित एक्सप्रेशन पार्सर द्वारा मूल्यांकन किए जाते हैं जो तुलनाएँ, बूलियन ऑपरेटर्स, और @-संदर्भ समझता है — यह कभी कोड बनाकर नहीं चलाता। यह जानबूझकर है: यह औज़ार को उस JSON पर इशारा करने के लिए सुरक्षित रखता है जिस पर आप पूरी तरह भरोसा नहीं करते, और पेज को ब्राउज़र की कंटेंट-सिक्योरिटी नीति के भीतर रखता है।
क्या JSONPath नोड्स को संपादित या हटा सकता है?#
नहीं — यह एक केवल-पढ़ने योग्य क्वेरी औज़ार है। यह चुनता और दिखाता है, यह आपके JSON को बदलता नहीं। यदि आप देखना चाहते हैं कि दो दस्तावेज़ कैसे भिन्न हैं तो /en/json/diff/ औज़ार का सहारा लें।