मारियाडीबी में, JSON_CONTAINS()
एक अंतर्निहित फ़ंक्शन है जो आपको यह पता लगाने की अनुमति देता है कि दिए गए JSON दस्तावेज़ में एक निर्दिष्ट मान पाया गया है, या दस्तावेज़ के भीतर एक विशिष्ट पथ पर।
यह 1
returns लौटाता है यदि इसमें मान शामिल है, 0
अगर ऐसा नहीं होता है, और NULL
यदि कोई तर्क NULL
है ।
सिंटैक्स
वाक्य रचना इस प्रकार है:
JSON_CONTAINS(json_doc, val[, path])
जहां json_doc
JSON दस्तावेज़ है, val
खोजने का मान है, और path
एक वैकल्पिक मान जो दस्तावेज़ में पथ निर्दिष्ट करता है।
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, '{"name": "Wag"}');
परिणाम:
+--------------------------------------------------+ | JSON_CONTAINS(@json_document, '{"name": "Wag"}') | +--------------------------------------------------+ | 1 | +--------------------------------------------------+
इस मामले में, एक मैच था, और परिणाम 1
. है ।
अगले उदाहरण में, कोई मेल नहीं है:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, '{"name": "Woof"}');
परिणाम:
+---------------------------------------------------+ | JSON_CONTAINS(@json_document, '{"name": "Woof"}') | +---------------------------------------------------+ | 0 | +---------------------------------------------------+
ध्यान दें कि मान घुंघराले ब्रेसिज़ में संलग्न है।
यहाँ क्या होता है जब दूसरा तर्क मान्य नहीं होता है:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, 'Wag');
परिणाम:
+--------------------------------------+ | JSON_CONTAINS(@json_document, 'Wag') | +--------------------------------------+ | NULL | +--------------------------------------+ 1 row in set, 1 warning (0.000 sec)
आइए देखें चेतावनी:
SHOW WARNINGS;
परिणाम:
+---------+------+-----------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------------------------------------------+ | Warning | 4038 | Syntax error in JSON text in argument 2 to function 'json_contains' at position 1 | +---------+------+-----------------------------------------------------------------------------------+
पथ निर्दिष्ट करें
पथ निर्दिष्ट करने के लिए आप वैकल्पिक रूप से तीसरे तर्क का उपयोग कर सकते हैं।
उदाहरण:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, 10, '$.weight');
परिणाम:
+-----------------------------------------------+ | JSON_CONTAINS(@json_document, 10, '$.weight') | +-----------------------------------------------+ | 1 | +-----------------------------------------------+
पथ निर्दिष्ट करते समय, मुझे घुंघराले ब्रेसिज़ का उपयोग करने की आवश्यकता नहीं थी।
यहाँ एक स्ट्रिंग की खोज कर रहा है:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, '"Wag"', '$.name');
परिणाम:
+--------------------------------------------------+ | JSON_CONTAINS(@json_document, '"Wag"', '$.name') | +--------------------------------------------------+ | 1 | +--------------------------------------------------+
ध्यान दें कि मैंने सिंगल कोट्स के अंदर डबल कोट्स का इस्तेमाल किया है। अगर मैं दोहरे उद्धरण चिह्नों को छोड़ देता हूं, तो यहां क्या होता है:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, 'Wag', '$.name');
परिणाम:
+------------------------------------------------+ | JSON_CONTAINS(@json_document, 'Wag', '$.name') | +------------------------------------------------+ | NULL | +------------------------------------------------+ 1 row in set, 1 warning (0.000 sec)
और आइए चेतावनी देखें:
SHOW WARNINGS;
परिणाम:
+---------+------+-----------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------------------------------------------+ | Warning | 4038 | Syntax error in JSON text in argument 2 to function 'json_contains' at position 1 | +---------+------+-----------------------------------------------------------------------------------+
नेस्टेड संरचनाएं
यहां एक उदाहरण दिया गया है जो नेस्टेड दस्तावेज़ में मान ढूंढता है:
SET @json_document = '{ "name": "Wag", "specs": { "weight": 10, "height": 30 } }';
SELECT JSON_CONTAINS(@json_document, 30, '$.specs.height');
परिणाम:
+-----------------------------------------------------+ | JSON_CONTAINS(@json_document, 30, '$.specs.height') | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+
अशक्त तर्क
यदि कोई तर्क NULL
है , परिणाम NULL
. है :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT
JSON_CONTAINS(null, 10, '$.weight') AS a,
JSON_CONTAINS(@json_document, null, '$.weight') AS b,
JSON_CONTAINS(@json_document, 10, null) AS c;
परिणाम:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
गलत पैरामीटर गणना
तर्क न देने से त्रुटि होती है:
SELECT JSON_CONTAINS();
परिणाम:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS'
जब आप बहुत अधिक तर्क देते हैं तो ऐसा ही होता है:
SELECT JSON_CONTAINS('{ "a": 1}', 1, 2, 3);
परिणाम:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS'