मारियाडीबी में, JSON_EXTRACT()
एक अंतर्निहित फ़ंक्शन है जो किसी दिए गए पथ या पथ के आधार पर JSON दस्तावेज़ से डेटा निकालता है।
यह एकल मान और एकाधिक मान लौटा सकता है। यदि एकल मान का मिलान किया जाता है, तो एकल मान वापस किया जाता है। यदि कई मानों का मिलान किया जाता है, तो वे मान एक सरणी में वापस आ जाते हैं।
सिंटैक्स
वाक्य रचना इस प्रकार है:
JSON_EXTRACT(json_doc, path[, path] ...)
जहां json_doc
JSON दस्तावेज़ है, और प्रत्येक path
तर्क दस्तावेज़ के भीतर एक पथ है।
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.name');
परिणाम:
+----------------------------------------+ | JSON_EXTRACT(@json_document, '$.name') | +----------------------------------------+ | "Wag" | +----------------------------------------+
एकाधिक पथ
JSON दस्तावेज़ से कई मान वापस करने के लिए कई पथ निर्दिष्ट करने का एक उदाहरण यहां दिया गया है।
जब आप एक से अधिक मान लौटाते हैं, तो वे एक सरणी में वापस आ जाते हैं।
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.weight');
परिणाम:
+----------------------------------------------------+ | JSON_EXTRACT(@json_document, '$.name', '$.weight') | +----------------------------------------------------+ | ["Wag", 20] | +----------------------------------------------------+
गैर-मौजूद पथ
ऐसे पथ को पास करने से जो JSON दस्तावेज़ में मौजूद नहीं है NULL
. में परिणाम देता है ।
उदाहरण:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.color');
परिणाम:
+-----------------------------------------+ | JSON_EXTRACT(@json_document, '$.color') | +-----------------------------------------+ | NULL | +-----------------------------------------+
हालाँकि, यदि कई पथ पारित किए जाते हैं, और उनमें से कम से कम एक मेल खाता है, तो मिलान मान निकाला जाता है और एक सरणी में वापस कर दिया जाता है। यह सच है, भले ही केवल एक मान निकाला गया हो।
उदाहरण:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.color');
परिणाम:
+---------------------------------------------------+ | JSON_EXTRACT(@json_document, '$.name', '$.color') | +---------------------------------------------------+ | ["Wag"] | +---------------------------------------------------+
सरणी
यहां एक सरणी से डेटा निकालने का एक उदाहरण दिया गया है:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_EXTRACT(@json_document, '$.awards[0]');
परिणाम:
+---------------------------------------------+ | JSON_EXTRACT(@json_document, '$.awards[0]') | +---------------------------------------------+ | "Top Dog" | +---------------------------------------------+
सरणियाँ शून्य-आधारित हैं, और इसलिए $.awards[0]
awards
का पहला तत्व निकालता है सरणी।
नेस्टेड ऑब्जेक्ट
किसी अन्य ऑब्जेक्ट के अंदर नेस्टेड ऑब्जेक्ट से डेटा निकालने का एक उदाहरण यहां दिया गया है:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_EXTRACT(
@json_document,
'$.details.awards.New York Marathon'
) AS Result;
परिणाम:
+---------------+ | Result | +---------------+ | "Fastest Dog" | +---------------+
हालांकि, अगर हम सभी पुरस्कारों को प्राप्त करना चाहते हैं, तो हम $.details.awards
के रास्ते को छोटा कर सकते हैं :
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_EXTRACT(
@json_document,
'$.details.awards'
) AS Result;
परिणाम:
+---------------------------------------------------------------------------------------------------+ | Result | +---------------------------------------------------------------------------------------------------+ | {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"} | +---------------------------------------------------------------------------------------------------+
परिणाम को सुंदर बनाएं
हम JSON_EXTRACT()
. पास करके परिणाम को पढ़ने में आसान बना सकते हैं JSON_DETAILED()
. पर समारोह:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT
JSON_DETAILED(
JSON_EXTRACT(
@json_document,
'$.details.awards'
)
) AS Result;
परिणाम:
+------------------------------------------------+ | Result | +------------------------------------------------+ | { "Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog" } | +------------------------------------------------+
अशक्त तर्क
अगर कोई तर्क NULL
है , परिणाम NULL
. है :
SELECT
JSON_EXTRACT(null, '$.type'),
JSON_EXTRACT('{"a":1}', null);
परिणाम:
+------------------------------+-------------------------------+ | JSON_EXTRACT(null, '$.type') | JSON_EXTRACT('{"a":1}', null) | +------------------------------+-------------------------------+ | NULL | NULL | +------------------------------+-------------------------------+
गलत पैरामीटर गणना
तर्क न देने से त्रुटि होती है:
SELECT JSON_EXTRACT();
परिणाम:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXTRACT'
जब आप बहुत कम या बहुत अधिक तर्क देते हैं तो ऐसा ही होता है:
SELECT JSON_EXTRACT('{ "a": 1}');
परिणाम:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXTRACT'