SQLite में, json()
फ़ंक्शन कच्चे पाठ को परिवर्तित करता है जो JSON की तरह वास्तविक JSON में दिखता है।
जब हम फ़ंक्शन को कॉल करते हैं तो हम एक JSON स्ट्रिंग को एक तर्क के रूप में पास करते हैं। json()
फ़ंक्शन तब जांचता है कि तर्क एक वैध JSON स्ट्रिंग है और उस JSON स्ट्रिंग का एक छोटा संस्करण देता है। यदि तर्क अच्छी तरह से बनाई गई JSON स्ट्रिंग नहीं है, तो एक त्रुटि उत्पन्न होती है।
हालांकि, json()
फ़ंक्शन को यह जांचने के लिए डिज़ाइन नहीं किया गया था कि कोई मान मान्य JSON है या नहीं। ऐसा करने के लिए, json_valid()
. का उपयोग करें इसके बजाय कार्य करें।
सिंटैक्स
json(X)
जहां X
जाँचने और कम करने के लिए मूल्य है।
उदाहरण
SELECT json('{ "a": 1 }');
परिणाम:
{"a":1}
इस मामले में, मैंने एक वैध JSON दस्तावेज़ प्रदान किया था, और इसलिए इसका एक छोटा संस्करण वापस कर दिया गया था (अनावश्यक रिक्त स्थान हटा दिए गए थे)।
यहां एक उदाहरण दिया गया है जो अधिक रिक्त स्थान वाले बड़े JSON दस्तावेज़ का उपयोग करता है:
SELECT json('{
"_id": 1.0,
"title": "Animals",
"body": "blah blah 1",
"tags": [
"cats",
"dogs"
]
}');
परिणाम:
{"_id":1.0,"title":"Animals","body":"blah blah 1","tags":["cats","dogs"]}
json()
फ़ंक्शन तब उपयोगी हो सकता है जब आपको JSON को किसी अन्य फ़ंक्शन में पास करने की आवश्यकता हो। जैसा कि उल्लेख किया गया है कि यह कच्चे पाठ को परिवर्तित करता है जो JSON की तरह वास्तविक JSON में दिखता है, जो इसे उस समय के लिए आदर्श बनाता है जब आपको इसे अन्य फ़ंक्शन में पास करने की आवश्यकता होती है। फिर दूसरा फ़ंक्शन मान को स्ट्रिंग के बजाय JSON के रूप में व्याख्यायित करेगा।
अमान्य JSON
अमान्य JSON स्ट्रिंग पास करने से त्रुटि होती है:
SELECT json('{oops!');
परिणाम:
Runtime error: malformed JSON
डुप्लिकेट लेबल
यदि किसी JSON दस्तावेज़ में डुप्लिकेट लेबल हैं, तो इस बात की कोई गारंटी नहीं है कि वे हमेशा संरक्षित रहेंगे।
लेखन के समय, डुप्लिकेट लेबल संरक्षित किए जाते हैं। हालांकि, SQLite दस्तावेज़ीकरण सलाह देता है कि यह SQLite के भविष्य के संस्करण में बदल सकता है, ताकि डुप्लिकेट लेबल चुपचाप हटा दिए जाएं।
यहां एक उदाहरण दिया गया है जो डुप्लिकेट लेबल वाले JSON दस्तावेज़ का उपयोग करता है:
SELECT json('{ "a": 1, "b": 1, "a" : 2 }');
परिणाम:
{"a":1,"b":1,"a":2}
इस मामले में, मेरे JSON दस्तावेज़ में a
. नामक दो लेबल हैं . दोनों को मेरी SQLite स्थापना (संस्करण 3.38.0) में संरक्षित किया गया था, लेकिन भविष्य के SQLite संस्करणों में हमेशा ऐसा नहीं हो सकता है।