मारियाडीबी में, JSON_REMOVE()
एक अंतर्निहित फ़ंक्शन है जो JSON दस्तावेज़ से डेटा निकालता है और परिणाम देता है।
सिंटैक्स
वाक्य रचना इस प्रकार है:
JSON_REMOVE(json_doc, path[, path] ...)
उदाहरण
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
SET @json = '{ "name" : "Wag", "type" : "Dog" }';
SELECT JSON_REMOVE(@json, '$.type');
परिणाम:
+------------------------------+ | JSON_REMOVE(@json, '$.type') | +------------------------------+ | {"name": "Wag"} | +------------------------------+
इस मामले में हमने डेटा सदस्य type
. को हटा दिया है दस्तावेज़ से। दूसरे शब्दों में, type
कुंजी और उससे संबद्ध मान हटा दिए गए थे।
सरणी
JSON_REMOVE()
संपूर्ण सरणी, या सरणी के भीतर विशिष्ट तत्वों को निकालने के लिए उपयोग किया जा सकता है।
संपूर्ण सरणी को निकालने के लिए, बस कुंजी नाम का उपयोग करें:
SET @json = '{ "name" : "Wag", "scores" : [8, 7, 9] }';
SELECT JSON_REMOVE(@json, '$.scores');
परिणाम:
+--------------------------------+ | JSON_REMOVE(@json, '$.scores') | +--------------------------------+ | {"name": "Wag"} | +--------------------------------+
इसने पूरे सरणी को दस्तावेज़ से हटा दिया।
किसी सरणी तत्व को निकालने के लिए, तत्व की अनुक्रमणिका निर्दिष्ट करें। किसी सरणी से किसी सरणी तत्व को निकालने का एक उदाहरण यहां दिया गया है:
SET @json = '{ "name" : "Wag", "scores" : [8, 7, 9] }';
SELECT JSON_REMOVE(@json, '$.scores[1]');
परिणाम:
+-----------------------------------+ | JSON_REMOVE(@json, '$.scores[1]') | +-----------------------------------+ | {"name": "Wag", "scores": [8, 9]} | +-----------------------------------+
इस मामले में, दूसरा सरणी तत्व हटा दिया गया था। सरणी शून्य आधारित हैं, और इसलिए $.scores[1]
सरणी में दूसरे तत्व को संदर्भित करता है।
कैसे JSON_REMOVE()
. के लिए नीचे देखें सरणी के भीतर कई पथों को हटाने से संबंधित है।
एकाधिक पथ
एकाधिक पथ प्रदान करते समय, उनका मूल्यांकन बाएं से दाएं किया जाता है। इसका मतलब है कि पहले के मूल्यांकन के परिणाम का उपयोग अगले के लिए मूल्य के रूप में किया जाता है।
किसी सरणी से तत्वों को उनकी अनुक्रमणिका के आधार पर हटाते समय इस पर विशेष रूप से ध्यान देना आवश्यक है।
सबसे पहले, यहां एक उदाहरण दिया गया है जो एक दस्तावेज़ से उनकी कुंजी के आधार पर कई पथ निकाल देता है:
SET @json = '
{
"name" : "Wag",
"type" : "Dog",
"weight" : 10
}
';
SELECT JSON_REMOVE(@json, '$.type', '$.weight');
परिणाम:
+------------------------------------------+ | JSON_REMOVE(@json, '$.type', '$.weight') | +------------------------------------------+ | {"name": "Wag"} | +------------------------------------------+
प्रत्येक कुंजी/मान युग्म को अपेक्षानुसार हटा दिया गया था।
अगले उदाहरण में हम key/value युग्म को नहीं हटाते हैं। इसके बजाय, हम एक सरणी से कई तत्वों को हटाते हैं:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REMOVE(@json, '$.scores[2]', '$.scores[4]') AS a,
JSON_REMOVE(@json, '$.scores[4]', '$.scores[2]') AS b;
परिणाम:
+--------------------------+--------------------------+ | a | b | +--------------------------+--------------------------+ | {"scores": [0, 1, 3, 4]} | {"scores": [0, 1, 3, 5]} | +--------------------------+--------------------------+
इस मामले में हमने JSON_REMOVE()
. को कॉल किया दो बार। दोनों हटाने के लिए समान सरणी अनुक्रमणिका निर्दिष्ट करते हैं (2
और 4
), लेकिन हम दूसरी कॉल में तर्कों की अदला-बदली करते हैं। पहले उदाहरण में, यह जाता है 2
फिर 4
(उस क्रम में)। दूसरे उदाहरण में, यह 4
है फिर 2
।
इसने प्रत्येक कॉल के लिए एक अलग परिणाम उत्पन्न किया। जैसा कि उल्लेख किया गया है, कई पथों का मूल्यांकन बाएं से दाएं किया जाता है, और इसलिए क्रम परिणाम को प्रभावित कर सकता है।
यहां एक और उदाहरण दिया गया है जो बताता है कि कितने पथ निर्दिष्ट किए गए हैं, कौन से हैं, और किस क्रम में परिणाम काफी भिन्न हो सकते हैं:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REMOVE(@json, '$.scores[0]', '$.scores[1]', '$.scores[5]') AS a,
JSON_REMOVE(@json, '$.scores[1]', '$.scores[5]', '$.scores[0]') AS b,
JSON_REMOVE(@json, '$.scores[5]', '$.scores[0]', '$.scores[1]') AS c,
JSON_REMOVE(@json, '$.scores[5]', '$.scores[1]', '$.scores[0]') AS d,
JSON_REMOVE(@json, '$.scores[1]', '$.scores[0]', '$.scores[5]') AS e,
JSON_REMOVE(@json, '$.scores[0]', '$.scores[5]', '$.scores[1]') AS f;
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
a: {"scores": [1, 3, 4, 5]} b: {"scores": [2, 3, 4, 5]} c: {"scores": [1, 3, 4]} d: {"scores": [2, 3, 4]} e: {"scores": [2, 3, 4, 5]} f: {"scores": [1, 3, 4, 5]}
अशक्त तर्क
अगर कोई तर्क NULL
है , परिणाम NULL
. है :
SELECT
JSON_REMOVE(null, '$.a') AS a,
JSON_REMOVE('{"a":1}', null) AS b,
JSON_REMOVE(null, null) AS c;
परिणाम:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
गलत पैरामीटर गणना
कॉलिंग JSON_REMOVE()
बिना तर्क के त्रुटि उत्पन्न होती है:
SELECT JSON_REMOVE();
परिणाम:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REMOVE'
जब पर्याप्त तर्क पारित नहीं होते हैं तो ऐसा ही होता है:
SELECT JSON_REMOVE('{"a":1}');
परिणाम:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REMOVE'