SQLite में, ->>
ऑपरेटर JSON दस्तावेज़ से एक उप-घटक निकालता है और उस उप-घटक का SQL प्रतिनिधित्व देता है।
->>
ऑपरेटर को पहली बार SQLite संस्करण 3.38.0 (22 फरवरी 2022 को जारी) में पेश किया गया था।
सिंटैक्स
वाक्य रचना इस प्रकार है:
json ->> path
जहां json
JSON दस्तावेज़ है और path
उपघटक का पथ है जिसे हम इससे निकालना चाहते हैं।
इसलिए हम ऑपरेटर के बाईं ओर एक JSON दस्तावेज़ प्रदान करते हैं, और हम उस पथ को निर्दिष्ट करते हैं जिसे हम इसके दाईं ओर निकालना चाहते हैं।
->>
ऑपरेटर हमेशा निर्दिष्ट उप-घटक का SQL प्रतिनिधित्व देता है। JSON प्रतिनिधित्व वापस करने के लिए, ->
. का उपयोग करें इसके बजाय ऑपरेटर।
उदाहरण
यह प्रदर्शित करने के लिए एक सरल उदाहरण है कि ->>
. कैसे ऑपरेटर काम करता है:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$';
परिणाम:
{"name":"Wag","type":"Dog"}
इस मामले में, मैंने '$'
. का पथ निर्दिष्ट किया है जो पूरे दस्तावेज़ को लौटा देता है।
आइए एक और पथ निर्दिष्ट करें:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type';
परिणाम:
Dog
हम डॉलर के चिह्न और पूर्ण विराम को भी इस तरह से पूरी तरह से हटा सकते हैं:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'type';
परिणाम:
Dog
यहाँ यह एक बड़े JSON दस्तावेज़ के साथ है:
SELECT '[
{
"user" : "Spike",
"age" : 30,
"scores" : [ 9, 7, 3 ]
},
{
"user" : "Faye",
"age" : 25,
"scores" : [ 90, 87, 93 ]
},
{
"user" : "Jet",
"age" : 40,
"scores" : [ 50, 38, 67 ]
}
]' ->> '$[0]';
परिणाम:
{"user":"Spike","age":30,"scores":[9,7,3]}
SQLite में, सरणियाँ शून्य आधारित होती हैं, और इसलिए निर्दिष्ट करती हैं [0]
पहला सरणी तत्व देता है।
यदि हम केवल उस उपयोगकर्ता के स्कोर प्राप्त करना चाहते हैं, तो हम ऐसा कर सकते हैं:
SELECT '[
{
"user" : "Spike",
"age" : 30,
"scores" : [ 9, 7, 3 ]
},
{
"user" : "Faye",
"age" : 25,
"scores" : [ 90, 87, 93 ]
},
{
"user" : "Jet",
"age" : 40,
"scores" : [ 50, 38, 67 ]
}
]' ->> '$[0].scores';
परिणाम:
[9,7,3]
हम और भी गहराई तक जा सकते हैं और एक विशिष्ट स्कोर निकाल सकते हैं:
SELECT '[
{
"user" : "Spike",
"age" : 30,
"scores" : [ 9, 7, 3 ]
},
{
"user" : "Faye",
"age" : 25,
"scores" : [ 90, 87, 93 ]
},
{
"user" : "Jet",
"age" : 40,
"scores" : [ 50, 38, 67 ]
}
]' ->> '$[0].scores[1]';
परिणाम:
7
गैर-मौजूद पथ
यदि पथ JSON में मौजूद नहीं है, तो एक शून्य मान वापस आ जाता है:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.age';
परिणाम:
null
ध्यान दें कि SQLite में, आप .nullvalue
. का उपयोग कर सकते हैं जब भी कोई शून्य मान लौटाया जाता है तो आउटपुट के लिए एक स्ट्रिंग निर्दिष्ट करने के लिए। मेरे मामले में, मैंने पहले निम्न आदेश चलाया था:
.nullvalue null
यह निर्दिष्ट करता है कि टेक्स्ट null
जब भी कोई शून्य मान लौटाया जाता है तो आउटपुट होना चाहिए। यही कारण है कि उपरोक्त उदाहरण टेक्स्ट को आउटपुट करता है null
. अगर मैंने ऐसा नहीं किया होता, तो परिणाम शायद खाली होता।
अमान्य JSON
यदि पहला तर्क मान्य JSON नहीं है, तो एक त्रुटि उत्पन्न होती है:
SELECT '{ "name" }' ->> '$';
परिणाम:
Runtime error: malformed JSON
अमान्य पथ
और यदि दूसरा तर्क मान्य पथ नहीं है, तो एक त्रुटि उत्पन्न होती है:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$name';
परिणाम:
Runtime error: JSON path error near 'name'
इस मामले में, मैं पूर्ण विराम शामिल करना भूल गया (.
) डॉलर चिह्न के बीच ($
) और name
।
हालांकि जैसा कि उल्लेख किया गया है, डॉलर के चिह्न और पूर्ण विराम को पूरी तरह से छोड़ना संभव है:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'name';
परिणाम:
Wag