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