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