SQLite json_set()
फ़ंक्शन हमें JSON दस्तावेज़ में एक मान डालने या बदलने की अनुमति देता है।
जब हम फ़ंक्शन को कॉल करते हैं, तो हम मूल JSON को पहले तर्क के रूप में पास करते हैं, उसके बाद एक पथ होता है जो निर्दिष्ट करता है कि नया मान कहां डालना/बदलना है, उसके बाद मान डालने/बदलने के लिए।
यदि आवश्यक हो तो हम एकाधिक कुंजी/मान जोड़े भी सम्मिलित/बदल सकते हैं।
सिंटैक्स
यह इस तरह काम करता है:
json_set(json, path1, value1, path2, value2...)
जहां json
मूल JSON का प्रतिनिधित्व करता है, और path1, value1, path2, value2...
पथ/मूल्य जोड़े हैं जिनका उपयोग हम JSON दस्तावेज़ में नए मान डालने के लिए कर सकते हैं (या प्रतिस्थापित करें, जैसा भी मामला हो)।
उदाहरण
प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है:
SELECT json_set('{ "a" : 1 }', '$.b', 2);
परिणाम:
{"a":1,"b":2}
यहां, मैंने एक नया कुंजी/मान युग्म डाला ("b":2
) JSON दस्तावेज़ में।
हम इस तरह से कई कुंजी/मूल्य जोड़े सम्मिलित कर सकते हैं:
SELECT json_set('{ "a" : 1 }', '$.b', 2, '$.c', 3 );
परिणाम:
{"a":1,"b":2,"c":3}
जब मैंने json_set()
. को कॉल किया तो मैंने बस अधिक कुंजी/मूल्य तर्क जोड़े ।
मान बदलें
यदि कुंजी पहले से मौजूद है, तो उसके मान को नए मान से बदल दिया जाता है:
SELECT json_set('{ "a" : 1, "b" : 2 }', '$.b', 3);
परिणाम:
{"a":1,"b":3}
यह json_set()
. के बीच मुख्य अंतर है और json_insert()
. json_insert()
यदि कुंजी पहले से मौजूद है तो फ़ंक्शन मान सम्मिलित नहीं करेगा।
मानों को बदलने का दूसरा तरीका json_replace()
. का उपयोग करना है ।
ऑब्जेक्ट डालें
यहां JSON ऑब्जेक्ट डालने का एक उदाहरण दिया गया है:
SELECT json_set('{ "a" : 1 }', '$.b', json('{ "c" : 2 }') );
परिणाम:
{"a":1,"b":{"c":2}}
इस मामले में, मैंने json()
. का इस्तेमाल किया JSON स्ट्रिंग के रूप में मेरे तर्क को वापस करने के लिए कार्य करें। जब मैं ऐसा नहीं करता तो क्या होता है:
SELECT json_set('{ "a" : 1 }', '$.b', '{ "c" : 2 }' );
परिणाम:
{"a":1,"b":"{ \"c\" : 2 }"}
JSON दस्तावेज़ को JSON ऑब्जेक्ट के बजाय टेक्स्ट मान के रूप में डाला जाता है, और इसलिए इसके दोहरे उद्धरण बैकस्लैश से बच जाते हैं।
हालांकि, केवल सिंगल कोट्स को हटाने से एक त्रुटि होती है:
SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } );
परिणाम:
Parse error: unrecognized token: "{" SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } ); error here ---^
सिंगल कोट्स या json()
. के बिना फ़ंक्शन, जैसे ही यह बाएं घुंघराले ब्रेस का सामना करता है, हमें एक त्रुटि मिलती है।
JSON ऑब्जेक्ट डालने का दूसरा तरीका json_object()
. का उपयोग करना है json()
. के बजाय फ़ंक्शन समारोह:
SELECT json_set('{ "a" : 1 }', '$.b', json_object('c', 2) );
परिणाम:
{"a":1,"b":{"c":2}}
एक सरणी सम्मिलित करें
सरणियाँ सम्मिलित करते समय यह एक समान बात है:
SELECT json_set('{ "a" : 1 }', '$.b', json('[ 2, 3, 4 ]'));
परिणाम:
{"a":1,"b":[2,3,4]}
अगर हम json()
. को हटा दें फ़ंक्शन, हमें यह मिलता है:
SELECT json_set('{ "a" : 1 }', '$.b', '[ 2, 3, 4 ]');
परिणाम:
{"a":1,"b":"[ 2, 3, 4 ]"}
और अगर हम सिंगल कोट्स हटाते हैं, तो हमें एक त्रुटि मिलती है:
SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);
परिणाम:
Parse error: no such column: 2, 3, 4 SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]); error here ---^
हम वैकल्पिक रूप से json_array()
. का उपयोग कर सकते हैं json()
. के बजाय फ़ंक्शन . वह फ़ंक्शन आपको इसके तर्कों के आधार पर एक सरणी बनाने की अनुमति देता है:
SELECT json_set('{ "a" : 1 }', '$.b', json_array( 2, 3, 4 ) );
परिणाम:
{"a":1,"b":[2,3,4]}
किसी सरणी के अंत में मान जोड़ें
हम json_set()
. का उपयोग कर सकते हैं किसी सरणी के अंत में मान जोड़ने के लिए।
ऐसा करने के लिए, [#]
. की एक सरणी अनुक्रमणिका का उपयोग करें :
SELECT json_set('[ 1, 2, 3 ]', '$[#]', 4 );
परिणाम:
[1,2,3,4]
नेस्टेड सरणियों पर भी यही सिद्धांत लागू होता है:
SELECT json_set('[ 1, [ "a", "b" ], 3 ]', '$[1][#]', "c" );
परिणाम:
[1,["a","b","c"],3]
सरणी तत्वों को बदलें
हम json_set()
. का उपयोग कर सकते हैं सरणी में तत्वों को बदलने के लिए:
SELECT json_set('[ 1, 2, 3 ]', '$[1]', 4 );
परिणाम:
[1,4,3]
सरणियाँ शून्य आधारित हैं, और इसलिए [1]
दूसरे सरणी आइटम को इंगित करता है।
json_replace()
फ़ंक्शन का उपयोग मौजूदा तत्वों को बदलने के लिए भी किया जा सकता है। फिर से, यह json_insert()
. से अलग है , जो मौजूदा तत्वों को प्रतिस्थापित नहीं करता है।
अमान्य पथ
यदि हमारा पथ ठीक से नहीं बना है तो हमें एक त्रुटि मिलेगी:
SELECT json_set('{ "a" : 1 }', 'b', 2);
परिणाम:
Runtime error: JSON path error near 'b'
इस मामले में, मैं $.
. शामिल करना भूल गया रास्ते के सामने।
अमान्य JSON दस्तावेज़
हमें एक त्रुटि भी मिलेगी जो JSON अच्छी तरह से गठित नहीं है:
SELECT json_set('{ "a" : 1', '$.b', 2);
परिणाम:
Runtime error: malformed JSON
इस बार त्रुटि हमें बताती है कि हमारा JSON विकृत है।