SQLite में, json_array_length()
फ़ंक्शन किसी दिए गए JSON सरणी में तत्वों की संख्या देता है।
सरणी एक तर्क के रूप में प्रदान की जाती है। यदि सरणी एक बड़े JSON दस्तावेज़ में एम्बेड की गई है, तो हम सरणी के पथ को निर्दिष्ट करने के लिए वैकल्पिक दूसरे तर्क का उपयोग कर सकते हैं।
यदि मान एक सरणी नहीं है, तो फ़ंक्शन 0
लौटाता है ।
सिंटैक्स
फ़ंक्शन का उपयोग निम्नलिखित दो तरीकों से किया जा सकता है:
json_array_length(X)
json_array_length(X,P)
जहां X
सरणी का प्रतिनिधित्व करता है और P
एक वैकल्पिक पथ है जिसका उपयोग किसी बड़े दस्तावेज़ में सरणी के पथ को निर्दिष्ट करने के लिए किया जा सकता है।
उदाहरण
प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है:
SELECT json_array_length('[ 7, 12, 10 ]');
परिणाम:
3
सरणी में तीन तत्व होते हैं और इसलिए 3
लौटा दिया गया है।
पथ निर्दिष्ट करें
हम सरणी के पथ को निर्दिष्ट करने के लिए दूसरे तर्क का भी उपयोग कर सकते हैं:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
परिणाम:
3
इस मामले में सरणी शीर्ष स्तर पर है, और इसलिए हम $
. पास करते हैं पथ के रूप में।
निम्न उदाहरण एक बड़े दस्तावेज़ में एम्बेड की गई सरणी का उपयोग करता है:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs'
);
परिणाम:
3
इस मामले में, dogs
. पर सरणी इसमें तीन तत्व होते हैं।
हम अगले स्तर तक नेविगेट कर सकते हैं और अन्य सरणियों में से एक में तत्वों की संख्या का पता लगा सकते हैं:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1].scores'
);
परिणाम:
4
सरणी शून्य आधारित हैं, और इसलिए गिनती 0
. से शुरू होती है . इसलिए, हमने [1]
. निर्दिष्ट किया है dogs
. के भीतर दूसरा तत्व प्राप्त करने के लिए सरणी, जो एक JSON ऑब्जेक्ट होता है। फिर हम .scores
. का उपयोग करते हैं इसकी सरणी चुनने के लिए।
गैर-सरणी का चयन करना
यदि पथ JSON सरणी के अलावा किसी अन्य मान को इंगित करता है, 0
लौटा दिया गया है:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1].name'
);
परिणाम:
0
एक गैर-मौजूद पथ का चयन करना
यदि दूसरा तर्क उस पथ को इंगित करता है जो मौजूद नहीं है, null
लौटा दिया गया है।
सबसे पहले, .nullvalue
सेट करते हैं करने के लिए null
:
.nullvalue NULL
.nullvalue
डॉट कमांड हमें एक स्ट्रिंग प्रदान करने की अनुमति देता है जिसका उपयोग शून्य मानों को बदलने के लिए किया जाएगा। यह कई तरीकों में से एक है जिससे आप SQLite में एक स्ट्रिंग के साथ अशक्त मानों को बदल सकते हैं। इस मामले में, मैंने इसे NULL
. पर सेट किया है . अब, कोई भी शून्य मान NULL
लौटाएगा रिक्त परिणाम के बजाय।
अब json_array_length()
पर कॉल करते हैं , लेकिन एक दूसरे तर्क का उपयोग करें जो एक गैर-मौजूद पथ की ओर इशारा करता है:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.cats'
);
परिणाम:
NULL
अमान्य पथ
यदि हमारा पथ ठीक से नहीं बना है तो हमें एक त्रुटि मिलेगी:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'dogs'
);
परिणाम:
Runtime error: JSON path error near 'dogs'
इस मामले में, मैं $.
. शामिल करना भूल गया रास्ते के सामने।
अमान्य JSON दस्तावेज़
हमें एक त्रुटि भी मिलेगी जो JSON अच्छी तरह से गठित नहीं है:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
परिणाम:
Runtime error: malformed JSON
इस बार त्रुटि हमें बताती है कि हमारा JSON विकृत है।