सभी लेख

JSONPath: बिना मैन्युअल पार्सिंग के JSON डेटा खोजना

JSONPath एक क्वेरी भाषा है जो JSON डॉक्युमेंट से पथ के आधार पर मान निकालती है — बिलकुल वही काम जो XPath, XML के लिए करता है। भारत में कई पुराने सरकारी और बैंकिंग सिस्टम जो XML/SOAP पर आधारित थे, उनसे JSON-आधारित REST API की तरफ़ माइग्रेट करने वाले डेवलपर्स को यह सिंटैक्स जाना-पहचाना लगेगा।

बुनियादी सिंटैक्स

कोई भी expression $ से शुरू होता है, जो डॉक्युमेंट का रूट है। इसके बाद फ़ील्ड तक डॉट से ($.user.name) या ब्रैकेट से ($['user']['name']) पहुँचा जाता है, और array के element तक इंडेक्स से ($.items[0])।

एक साथ कई मान चुनना

* चिह्न किसी एक स्तर के सभी element चुनता है, जबकि .. recursive descent है — यह डॉक्युमेंट की किसी भी गहराई पर मौजूद फ़ील्ड को बिना सटीक पथ जाने ढूँढ लेता है। [?(@.price < 10)] जैसे फ़िल्टर, किसी शर्त के आधार पर array के element चुनते हैं, जो प्रोग्रामिंग एक्सप्रेशन जैसा दिखता है।

यह किस काम आता है

  • डिबगिंग के दौरान बड़े API रिस्पॉन्स से कोई एक फ़ील्ड तुरंत निकालना, बिना स्क्रिप्ट लिखे।
  • JSON फ़ॉर्मैट में लॉग या इवेंट को किसी शर्त पर फ़िल्टर करना।
  • कॉन्फ़िग फ़ाइल से कोई मान निकालना, बिना हाथ से पार्सर लिखे।

JSONPath बनाम XPath: इंडेक्स की गिनती में गड़बड़ी

जो डेवलपर XPath से आते हैं, जहाँ node की गिनती 1 से शुरू होती है (book[1] यानी पहला element), वे JSONPath में अक्सर गलती कर बैठते हैं — यहाँ गिनती 0 से शुरू होती है, यानी book[1] असल में दूसरा element है। पुराने XML/XPath सिस्टम को JSON API में बदलते समय यही एक अंतर कई bugs की जड़ बनता है।

डॉट या स्पेस वाली keys

अगर किसी फ़ील्ड के नाम में ही डॉट, हाइफ़न या स्पेस हो (जैसे literal key "user.name", न कि नेस्टेड फ़ील्ड), तो डॉट-नोटेशन $.user.name अस्पष्ट हो जाता है — पार्सर इसे नेस्टेड फ़ील्ड user और name मान लेता है। ऐसे में key को कोट्स के साथ ब्रैकेट में लिखना ज़रूरी है: $['user.name']

टूल आज़माएँ