MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

मारियाडीबी JSON_SET () समझाया गया

मारियाडीबी में, JSON_SET() एक अंतर्निहित फ़ंक्शन है जो JSON दस्तावेज़ में डेटा को अपडेट या सम्मिलित करता है और परिणाम देता है।

JSON_SET() डेटा अपडेट और सम्मिलित कर सकते हैं, जबकि JSON_INSERT() केवल डेटा सम्मिलित कर सकते हैं, और JSON_REPLACE() केवल डेटा अपडेट कर सकते हैं।

सिंटैक्स

वाक्य रचना इस प्रकार है:

JSON_SET(json_doc, path, val[, path, val] ...)

कहां:

  • json_doc JSON दस्तावेज़ है।
  • 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'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मारियाडीबी सर्वर 10.5 में नया क्या है?

  2. मारियाडीबी में TIMESTAMPDIFF () कैसे काम करता है

  3. मारियाडीबी JSON_OBJECTAGG () समझाया गया

  4. MariaDB में किसी संख्या में प्रतिशत चिह्न जोड़ें

  5. मारियाडीबी NULLIF () समझाया गया