JSON Pointer, RFC 6901, एक छोटा विनिर्देश है: चार पृष्ठ, एक सिंटैक्स,
एक पथ का क्या अर्थ है इसके बारे में कोई अस्पष्टता नहीं। यह वहाँ दिखाई
देता है जहाँ किसी चीज़ को JSON दस्तावेज़ के अंदर एक सटीक स्थान को
संदर्भित करने की आवश्यकता होती है बिना अपनी खुद की पथ भाषा का आविष्कार
किए, सबसे अक्सर JSON Patch और JSON Schema की $ref कीवर्ड के अंदर।
सिंटैक्स, संक्षेप में
एक pointer / से अलग किए गए टोकन की एक श्रृंखला है। /user/name का
मतलब है user ऑब्जेक्ट के अंदर name कुंजी। /items/0 का मतलब है
items एरे का पहला तत्व। खाली स्ट्रिंग, एक pointer बिना किसी टोकन के,
पूरे दस्तावेज़ का मतलब है। दो वर्णों को एक टोकन के अंदर escape की
आवश्यकता होती है: ~1 एक शाब्दिक / का प्रतिनिधित्व करता है, और
~0 एक शाब्दिक ~ का प्रतिनिधित्व करता है, हमेशा उसी क्रम में पढ़ा
जाता है ताकि ~01 / के बजाय ~1 का मतलब रखे।
JSON Pointer evaluator का उपयोग करना
एक दस्तावेज़ पेस्ट करें, एक pointer टाइप करें, और Resolve दबाएं। दिए गए
{"a/b":{"c~d":42},"list":["x","y"]}
pointer /a~1b/c~0d एक ऐसी कुंजी के माध्यम से हल होता है जिसमें वास्तव
में एक स्लैश है और एक ऐसी कुंजी जिसमें वास्तव में एक टिल्ड है, 42
लौटाता है। यही escapes के होने का पूरा कारण है: उनके बिना, सेपरेटर
वर्ण वाली कुंजी को संबोधित करना असंभव होगा।
एक विफल लुकअप आपको क्या बताता है
अधिकांश उपकरण एक विफल pointer को एक साधारण “नहीं मिला” के रूप में
रिपोर्ट करते हैं, जो एक ऐसे दस्तावेज़ में इसे ठीक करने के लिए पर्याप्त
नहीं है जिसमें कुछ कुंजियों से अधिक हैं। यह आपको बताता है कि pointer
कहाँ तक पहुँचा, उसने वहाँ क्या पाया, और ऑब्जेक्ट के पास वास्तव में
कौन सी कुंजियाँ हैं। उसी दस्तावेज़ के विरुद्ध /a~1b/nope माँगने पर
वापस मिलता है:
ऑब्जेक्ट में यहाँ कोई कुंजी “nope” नहीं है, इसके पास c
d है। /a1b तक हल किया गया
यह टाइपो को तुरंत देखने के लिए पर्याप्त है, बजाय यह अनुमान लगाने के कि क्या गलत हुआ के लिए पूरे दस्तावेज़ को फिर से पढ़ने के।
डैश, और यह क्यों हल नहीं होता
JSON Patch के अंदर, एक एरे में pointer के अंतिम टोकन के रूप में डैश
का मतलब है “अंतिम तत्व के बाद की स्थिति,” जोड़ने के लिए उपयोग किया
जाता है। अकेले, किसी दस्तावेज़ के विरुद्ध /items/- को हल करना कोई
मौजूदा मान नाम नहीं देता है, क्योंकि अभी वहाँ इंगित करने के लिए
कुछ भी नहीं है। evaluator इस अंतर को समझाता है बजाय इसे एक सामान्य
parse त्रुटि के रूप में मानने के।
यह JSONPath से कहाँ भिन्न है
JSON Pointer एक स्थान का नाम देता है और ठीक एक मान में हल होता है या विफल होता है। JSONPath एक क्वेरी भाषा है जो वाइल्डकार्ड्स, फ़िल्टर और स्लाइस के साथ एक साथ कई मानों से मेल खा सकती है। एक pointer का उपयोग तब करें जब आप पहले से जानते हैं कि आपको कौन सा मान चाहिए; JSONPath का उपयोग तब करें जब आप उन मानों की खोज कर रहे हैं जो किसी शर्त से मेल खाते हैं।