मारियाडीबी में, JSON_CONTAINS_PATH()
एक अंतर्निहित फ़ंक्शन है जो इंगित करता है कि किसी दिए गए JSON दस्तावेज़ में निर्दिष्ट पथ या पथ पर डेटा है या नहीं।
यह 1
returns लौटाता है यदि दस्तावेज़ में निर्दिष्ट पथ पर डेटा है, 0
अगर ऐसा नहीं होता है, और NULL
यदि कोई तर्क NULL
है ।
सिंटैक्स
वाक्य रचना इस प्रकार है:
JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)
जहां json_doc
JSON दस्तावेज़ है और path
उस पथ को निर्दिष्ट करता है जिसके लिए डेटा खोजना है। एकाधिक पथ प्रदान किए जा सकते हैं।
return_arg
तर्क निर्धारित करता है कि एकाधिक पथों से कैसे निपटें। यह one
हो सकता है या all
।
one
- फ़ंक्शन1
लौटाता है यदि JSON दस्तावेज़ में कम से कम एक पथ मौजूद है।all
- फ़ंक्शन1
लौटाता है केवल तभी जब सभी पथ JSON दस्तावेज़ में मौजूद हों।
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name');
परिणाम:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.name') | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+
इस मामले में, पथ मौजूद है, और परिणाम 1
. है ।
अगले उदाहरण में पथ मौजूद नहीं है, और परिणाम 0
. है :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type');
परिणाम:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.type') | +-----------------------------------------------------+ | 0 | +-----------------------------------------------------+
एकाधिक पथ
यहां कुछ उदाहरण दिए गए हैं जो दस्तावेज़ में कई पथ खोजते हैं:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.type',
'$.weight'
) AS Result;
परिणाम:
+--------+ | Result | +--------+ | 1 | +--------+
इस उदाहरण में हमने दो रास्तों की खोज की। एक पथ मौजूद है और दूसरा नहीं है। लेकिन हमें एक 1
मिला है वैसे भी (एक सकारात्मक परिणाम)। ऐसा इसलिए है क्योंकि हमने one
. का उपयोग किया है दूसरे तर्क के रूप में। one
निर्दिष्ट करता है कि हमें एक 1
मिलेगा यदि कोई पथ मौजूद है।
यदि हम all
का उपयोग करते हैं तो यहां बताया गया है कि क्या होता है दूसरे तर्क के रूप में:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.type',
'$.weight'
) AS Result;
परिणाम:
+--------+ | Result | +--------+ | 0 | +--------+
इस बार परिणाम 0
. है , क्योंकि JSON दस्तावेज़ में सभी पथ मौजूद नहीं हैं।
यदि हम गुम पथ को बदलते हैं ($.type
) जो मौजूद है, हमें एक अलग परिणाम मिलता है:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.name',
'$.weight'
) AS Result;
परिणाम:
+--------+ | Result | +--------+ | 1 | +--------+
सरणी
यहां एक उदाहरण दिया गया है जो यह जांचता है कि क्या दी गई अनुक्रमणिका किसी सरणी में मौजूद है:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[2]'
) AS Result;
परिणाम:
+--------+ | Result | +--------+ | 1 | +--------+
और अगर हम इंडेक्स को गैर-मौजूद में बढ़ाते हैं तो क्या होता है:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[3]'
) AS Result;
परिणाम:
+--------+ | Result | +--------+ | 0 | +--------+
नेस्टेड संरचनाएं
यहां एक उदाहरण दिया गया है जो नेस्टेड दस्तावेज़ में पथ ढूंढता है:
SET @json_document = '
{
"name": "Wag",
"specs": {
"weight": 10,
"height": 30
}
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.specs.height'
) AS Result;
परिणाम:
+--------+ | Result | +--------+ | 1 | +--------+
अशक्त तर्क
अगर कोई तर्क NULL
है , परिणाम NULL
. है :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT
JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
JSON_CONTAINS_PATH(@json_document, 'one', null) AS c;
परिणाम:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
गलत पैरामीटर गणना
तर्क न देने से त्रुटि होती है:
SELECT JSON_CONTAINS_PATH();
परिणाम:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'
जब आप पर्याप्त तर्क नहीं देते हैं तो ऐसा ही होता है:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document);
परिणाम:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'