मारियाडीबी में दो चयनकर्ता शामिल हैं जो हमें JSON सरणियों से तत्वों का चयन करने में सक्षम बनाते हैं:
[N]
तत्व संख्या का चयन करता है N सरणी में (उदाहरण के लिए,[0]
पहले तत्व का चयन करने के लिए)।[*]
सरणी में सभी तत्वों का चयन करता है।
इनका उपयोग कई JSON फ़ंक्शंस में किया जा सकता है जो कि MariaDB में शामिल हैं। निम्नलिखित उदाहरण उनका उपयोग JSON_EXTRACT()
के साथ करते हैं चयनित सरणी तत्वों को वापस करने के लिए कार्य करें।
उदाहरण - [N]
एक सरणी तत्व का चयन करने का तरीका प्रदर्शित करने के लिए यहां एक सरल उदाहरण दिया गया है:
SELECT JSON_EXTRACT('[1,2,3]', '$[1]');
परिणाम:
+---------------------------------+ | JSON_EXTRACT('[1,2,3]', '$[1]') | +---------------------------------+ | 2 | +---------------------------------+
सरणी शून्य-आधारित हैं, और इसलिए $[1]
दूसरे सरणी तत्व का चयन करता है।
यहाँ एक और उदाहरण दिया गया है, इस बार थोड़े बड़े JSON दस्तावेज़ का उपयोग करते हुए:
SET @json = '
{
"_id": 1,
"product": "Left Handed Screwdriver",
"sizes": [ "S", "M", "L" ]
}
';
SELECT JSON_EXTRACT(@json, '$.sizes[1]');
परिणाम:
+-----------------------------------+ | JSON_EXTRACT(@json, '$.sizes[1]') | +-----------------------------------+ | "M" | +-----------------------------------+
इस मामले में, .sizes
sizes
निर्दिष्ट करता है ऑब्जेक्ट सदस्य, और इसलिए $.sizes[1]
sizes
. में दूसरा आइटम चुनता है सरणी।
उदाहरण- [*]
[*]
चयनकर्ता सरणी में सभी तत्वों का चयन करता है।
उदाहरण:
SET @json = '
{
"_id": 1,
"product": "Left Handed Screwdriver",
"sizes": [ "S", "M", "L" ]
}
';
SELECT JSON_EXTRACT(@json, '$.sizes[*]');
परिणाम:
+-----------------------------------+ | JSON_EXTRACT(@json, '$.sizes[*]') | +-----------------------------------+ | ["S", "M", "L"] | +-----------------------------------+
इस मामले में, परिणाम बिल्कुल मूल सरणी जैसा दिखता है, इस स्थिति में, इसे केवल $.sizes
निर्दिष्ट करके वापस किया जा सकता था। ।
एकाधिक सरणी चयनकर्ता
लेकिन यहां एक और उदाहरण है जो दो सरणी चयनकर्ताओं का उपयोग करता है।
सबसे पहले, हम सरणी में सभी तत्वों का चयन करने के लिए वाइल्डकार्ड चयनकर्ता का उपयोग करते हैं। फिर हम किसी अन्य सरणी चयनकर्ता का उपयोग उस सरणी में केवल दूसरे तत्व का चयन करने के लिए करते हैं जो उन तत्वों के भीतर निहित है:
SET @json = '
{
"products" :
[
{
"_id": 1,
"product": "Left Handed Screwdriver",
"sizes": [ "S", "M", "L" ]
},
{
"_id": 2,
"product": "Long Weight",
"sizes": [ 8, 7, 10 ]
},
{
"_id": 3,
"product": "Bottomless Coffee Cup",
"sizes": [ "Tall", "Grande", "Venti" ]
}
]
}
';
SELECT JSON_EXTRACT(@json, '$.products[*].sizes[1]');
परिणाम:
+-----------------------------------------------+ | JSON_EXTRACT(@json, '$.products[*].sizes[1]') | +-----------------------------------------------+ | ["M", 7, "Grande"] | +-----------------------------------------------+
वाइल्डकार्ड चरण
यदि आपके JSON दस्तावेज़ में एक ही नाम के साथ कई सरणियाँ हैं, कुछ अलग-अलग स्तरों पर या अपने स्वयं के ऑब्जेक्ट में नेस्टेड हैं, तो आप वाइल्डकार्ड चरण (**
) की सहायता से उन सभी का चयन कर सकते हैं। ) वाइल्डकार्ड चरण पुनरावर्ती रूप से वर्तमान तत्व के सभी चाइल्ड तत्वों का चयन करता है।
यहां, हम इसका उपयोग JSONPath एक्सप्रेशन बनाने में मदद करने के लिए करते हैं जो sizes
नामक सभी सरणियों से दूसरा सरणी तत्व लौटाता है , अन्य दस्तावेज़ों में नेस्टेड सरणियों सहित:
SET @json = '[
{
"_id": 1,
"product": {
"name" : "Tuxedo",
"color" : "Blue",
"sizes": [ "S", "M", "L" ],
"accessories" : {
"belt" : {
"color" : "Navy",
"sizes" : [ "Wide", "Narrow" ]
},
"tie" : {
"color" : "Black",
"sizes" : [ "Short", "Medium", "Long" ]
}
}
}
}
]';
SELECT JSON_EXTRACT(@json, '$**.sizes[1]');
परिणाम:
+-------------------------------------+ | JSON_EXTRACT(@json, '$**.sizes[1]') | +-------------------------------------+ | ["M", "Narrow", "Medium"] | +-------------------------------------+