JSONPath या JSON Pointer
मुख्य बात: JSON Pointer एक अद्वितीय पता है जिसे key के रूप में संग्रहीत किया जा सकता है; JSONPath एक query भाषा है। गलत वाला चुनने से कॉन्फ़िग अपडेट टूट जाते हैं या टूटा हुआ JSONPath दोबारा बनाना पड़ता है।

मुख्य बात: जब आपको एक नोड का पता पढ़ना, लिखना या संग्रहीत करना हो (जैसे /server/cors/0) तो JSON Pointer उपयोग करें, और जब शर्त के आधार पर नोड्स का समूह चुनना हो तो JSONPath; जो भी path स्थायी रूप से सहेजा जाए वह Pointer होना चाहिए, कभी expression नहीं।
अपने आप से पूछें कि आपको एक नोड चाहिए या उनका समूह।
एक तालिका में
| JSON Pointer | JSONPath | |
|---|---|---|
| प्रकृति | अद्वितीय पता | Query expression |
| सिंटैक्स | /a/b/0 |
$.a.b[0], $..price |
| परिणाम | ठीक एक नोड, या कुछ नहीं | शून्य या अधिक नोड्स |
| Key के रूप में संग्रहणीय | हाँ, string ही पहचान है | नहीं, कई से मेल खा सकता है |
| मानक | RFC 6901 | RFC 9535 (2024 में अंतिम) |
JSON Pointer
/server/host -> "127.0.0.1"
/server/cors/0 -> "https://a.com"
/ -> पूरा document
जिन keys में / या ~ है वे escaped होते हैं: ~ के लिए ~0, / के लिए ~1। मूल्य है निश्चितता: पता एक string है, इसलिए यह डेटाबेस कॉलम, log पंक्ति या कॉन्फ़िग key में फ़िट हो जाता है। JSON Patch (RFC 6902) हर क्रिया को इसी तरह संबोधित करता है।
JSONPath
$.store.book[*].author
$..price
$.store.book[?(@.price < 10)]
SQL के WHERE के अधिक नज़दीक। वही expression डेटा के अनुसार शून्य, एक या सौ नोड्स लौटाता है।
दो विफलता के तरीके
JSONPath को कॉन्फ़िग key बनाना। $.server.port संग्रहीत करें और एक दिन संरचना array बन जाती है; expression अब कई ports से मेल खाता है और अपडेट तर्क के पास चुनने का कोई तरीका नहीं होता।
चयन के लिए Pointer उपयोग करना। "वे सारे नोड्स खोजें जिनका मूल्य 10 से कम है" pointer से असंभव है। खुद लूप लिखने का मतलब है आधा-अधूरा JSONPath बनाना।
असली सिस्टम काम कैसे बाँटते हैं
- कॉन्फ़िग पढ़ना, फ़ील्ड अपडेट, patches: Pointer, स्थिर और auditable
- डेटा खोज, थोक निष्कर्षण, रिपोर्टिंग: JSONPath, अभिव्यक्ति पहले
- जो कुछ भी स्थायी रूप से सहेजा जाए: केवल Pointer, कभी expression नहीं
FAQ
JSON Pointer और JSONPath के बीच चुनाव कैसे करूँ?
पूछें कि आपको एक नोड चाहिए या समूह। एक विशिष्ट नोड पढ़ने या लिखने और उस पता को key के रूप में संग्रहीत करने के लिए JSON Pointer उपयोग करें, क्योंकि pointer अद्वितीय है, जैसे /server/cors/0। शर्त के आधार पर नोड्स चुनने के लिए JSONPath उपयोग करें, जैसे $.store.book[?(@.price < 10)]।
JSONPath expression को कॉन्फ़िग key क्यों नहीं बनाया जा सकता?
क्योंकि expression कई नोड्स से मेल खा सकता है। $.server.port संग्रहीत करें और एक दिन संरचना array बन जाती है; expression तब कई ports से मेल खाता है और अपडेट तर्क तय नहीं कर सकता कि किसे बदलना है। जो कुछ भी स्थायी रूप से सहेजा या audited जाए उसे Pointer चाहिए।
क्या JSON Pointer शर्त के आधार पर नोड्स filter कर सकता है?
नहीं। Pointer केवल एक निश्चित path पर चलता है और नहीं जान सकता कि कौन से नोड्स मौजूद हैं, इसलिए वे सारे नोड्स चुनना जिनका मूल्य 10 से कम है असंभव है। वह लूप खुद लिखने का मतलब है आधा-अधूरा JSONPath बनाना।