मारियाडीबी में JSON के साथ काम करते समय, आप JSONPath एक्सप्रेशन का उपयोग JSON दस्तावेज़ में डेटा में हेरफेर करने के लिए कर सकते हैं।
मारियाडीबी द्वारा प्रदान की जाने वाली एक शक्तिशाली विशेषता वाइल्डकार्ड चरण है (**
) यह आपको वर्तमान तत्व के सभी चाइल्ड तत्वों को पुनरावर्ती रूप से चुनने की अनुमति देता है।
वाइल्डकार्ड चरण एक गैर-मानक एक्सटेंशन है, और यह MySQL में भी इसी अर्थ के साथ समर्थित है।
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है:
SET @json = '[
{ "name" : "Wag", "type" : "Dog" },
{ "name" : "Bark", "type" : "Dog" },
{ "name" : "Meow", "type" : "Cat" },
{ "name" : "Scratch", "type" : "Cat" }
]';
SELECT JSON_EXTRACT(@json, '$**.name');
परिणाम:
+------------------------------------+ | JSON_EXTRACT(@json, '$**.name') | +------------------------------------+ | ["Wag", "Bark", "Meow", "Scratch"] | +------------------------------------+
वाइल्डकार्ड चरण सभी ऑब्जेक्ट्स के माध्यम से चला गया और उनके name
. से मानों का चयन किया सदस्य।
इस मामले में, हम किसी अन्य चयनकर्ता के साथ समान परिणाम प्राप्त कर सकते थे। सरणी वाइल्डकार्ड चयनकर्ता ने हमें समान परिणाम प्राप्त करने में मदद की होगी:
SET @json = '[
{ "name" : "Wag", "type" : "Dog" },
{ "name" : "Bark", "type" : "Dog" },
{ "name" : "Meow", "type" : "Cat" },
{ "name" : "Scratch", "type" : "Cat" }
]';
SELECT JSON_EXTRACT(@json, '$[*].name');
परिणाम:
+------------------------------------+ | JSON_EXTRACT(@json, '$[*].name') | +------------------------------------+ | ["Wag", "Bark", "Meow", "Scratch"] | +------------------------------------+
वही परिणाम।
हालाँकि, यदि हम किसी भिन्न दस्तावेज़ का उपयोग करते हैं तो चीज़ें बदल जाती हैं।
उदाहरण 2
निम्नलिखित उदाहरण में, हमें वाइल्डकार्ड चरण और सरणी चयनकर्ता के बीच एक भिन्न परिणाम मिलता है:
SET @json = '[
{
"name" : "Homer",
"pets" : [
{
"name" : "Wag",
"type" : "Dog"
},
{
"name" : "Scratch",
"type" : "Cat"
}
]
}
]';
SELECT
JSON_EXTRACT(@json, '$**.name'),
JSON_EXTRACT(@json, '$[*].name');
परिणाम:
+---------------------------------+----------------------------------+ | JSON_EXTRACT(@json, '$**.name') | JSON_EXTRACT(@json, '$[*].name') | +---------------------------------+----------------------------------+ | ["Homer", "Wag", "Scratch"] | ["Homer"] | +---------------------------------+----------------------------------+
अलग परिणाम।
परिणाम स्पष्ट रूप से दस्तावेज़ और JSONPath अभिव्यक्ति के वास्तविक निर्माण पर निर्भर होंगे, और उपयोग किए गए चयनकर्ता आपकी आवश्यकताओं पर निर्भर होंगे।
याद रखने वाली एक बात यह है कि वाइल्डकार्ड चरण JSONPath अभिव्यक्ति में अंतिम चरण नहीं होना चाहिए। इसके बाद एक सरणी या ऑब्जेक्ट सदस्य चयनकर्ता चरण होना चाहिए।
उदाहरण 3
यहां एक उदाहरण दिया गया है जो 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"] | +-------------------------------------+
सरणी शून्य-आधारित हैं और इसलिए $**.sizes[1]
दूसरे तत्व को सभी sizes
. में संदर्भित करता है सरणियाँ।