हम SQLite का उपयोग कर सकते हैं json_remove()
JSON ऑब्जेक्ट या सरणी से एक या अधिक तत्वों को निकालने के लिए कार्य करता है।
जब हम फ़ंक्शन को कॉल करते हैं, तो हम मूल JSON को पहले तर्क के रूप में पास करते हैं, उसके बाद एक या अधिक पथ होते हैं जो निर्दिष्ट करते हैं कि किन तत्वों को निकालना है। "एलिमेंट्स" से मेरा मतलब या तो ऐरे एलिमेंट्स या ऑब्जेक्ट मेंबर्स (की/वैल्यू पेयर) से है।
सिंटैक्स
वाक्य रचना इस प्रकार है:
json_remove(X,P,...)
जहां X
मूल JSON का प्रतिनिधित्व करता है, और P,...
हटाने के लिए पथ/पथ का प्रतिनिधित्व करता है।
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');
परिणाम:
{"name":"Fluffy"}
यहां, हमने $.age
. निर्दिष्ट किया है पथ, और यही वह है जिसे JSON दस्तावेज़ से हटा दिया गया था।
एकाधिक सदस्यों को निकालें
कॉमा द्वारा अलग किए गए कई पथ निर्दिष्ट करके हम JSON ऑब्जेक्ट से कई सदस्यों को हटा सकते हैं:
SELECT json_remove('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'$.type',
'$.age'
);
परिणाम:
{"name":"Fluffy"}
सरणी
हम तत्व के सूचकांक को निर्दिष्ट करके सरणी तत्वों को हटा सकते हैं:
SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');
परिणाम:
[0,1,3]
सरणी शून्य-आधारित हैं, और इसलिए गिनती 0
. से शुरू होती है ।
हालांकि, उस क्रम का ध्यान रखना महत्वपूर्ण है जिसमें निष्कासन किया जाता है। निष्कासन क्रमिक रूप से बाएं से दाएं होते हैं। पूर्व निष्कासन के कारण हुए परिवर्तन बाद के तर्कों के लिए पथ खोज को प्रभावित कर सकते हैं।
यहां एक उदाहरण दिया गया है कि यह हमारे परिणाम को कैसे प्रभावित कर सकता है:
SELECT json_remove('[ 0, 1, 2, 3 ]',
'$[0]',
'$[2]'
);
परिणाम:
[1,2]
इस मामले में, सरणी तत्व 0
पहले हटा दिया गया था, फिर सरणी तत्व 2
शेष सरणी से हटा दिया गया था। दूसरे शब्दों में, पहले पथ को पहले ही हटा दिए जाने के बाद दूसरे पथ ने तत्व को सरणी से हटा दिया।
परिणामी सरणी वह है जिसका हमने अनुमान नहीं लगाया होगा। तत्वों को हटाने के बजाय 0
और 2
मूल सरणी से, हमने तत्वों को हटा दिया है 0
और 3
मूल सरणी से।
हम रास्तों को फिर से व्यवस्थित करके इस समस्या को दूर कर सकते हैं:
SELECT json_remove('[ 0, 1, 2, 3 ]',
'$[2]',
'$[0]'
);
परिणाम:
[1,3]
कोई पथ नहीं
पथ तर्क वास्तव में वैकल्पिक हैं। अगर हम json_remove()
. कहते हैं पथ तर्क के बिना, यह इनपुट JSON का एक छोटा संस्करण देता है (अर्थात अतिरिक्त खाली स्थान को हटाकर):
SELECT json_remove('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}'
);
परिणाम:
{"name":"Fluffy","type":"Cat","age":10}
यदि हम json()
. का उपयोग करते हैं तो यह वही परिणाम है जो हमें मिलता है json_remove()
के बजाय फ़ंक्शन करें ।
गैर-मौजूद पथ
एक पथ निर्दिष्ट करना जो इनपुट JSON परिणाम में मौजूद नहीं है, मूल JSON लौटाया जा रहा है, अपरिवर्तित:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');
परिणाम:
{"name":"Fluffy","age":10}
अमान्य पथ
यदि हमारा पथ ठीक से नहीं बना है तो हमें एक त्रुटि मिलेगी:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');
परिणाम:
Runtime error: JSON path error near 'age'
इस मामले में, मैं $.
. शामिल करना भूल गया रास्ते के सामने।
अमान्य JSON दस्तावेज़
हमें एक त्रुटि भी मिलेगी जो JSON अच्छी तरह से गठित नहीं है:
SELECT json_remove('{ "name" : "Fluffy", "age" }', '$.age');
परिणाम:
Runtime error: malformed JSON
इस बार त्रुटि हमें बताती है कि हमारा JSON विकृत है।