MySQL में, JSON_SET()
फ़ंक्शन किसी JSON दस्तावेज़ में मान सम्मिलित करता है या अद्यतन करता है और परिणाम देता है।
आप पहले तर्क के रूप में JSON दस्तावेज़ प्रदान करते हैं, उसके बाद सम्मिलित करने के लिए पथ, उसके बाद सम्मिलित करने के लिए मान प्रदान करते हैं। यदि आपको अनेक मानों को अपडेट करने की आवश्यकता है, तो आप अनेक पथ/मान जोड़े प्रदान कर सकते हैं।
सिंटैक्स
वाक्य रचना इस प्रकार है:
JSON_SET(json_doc, path, val[, path, val] ...)
कहां:
json_doc
JSON दस्तावेज़ है।path
उस तत्व का पथ है जिसके लिए डेटा सम्मिलित करना है या मान को अद्यतन करना है।val
नया मान है।
पथ-मान युग्मों का मूल्यांकन बाएँ से दाएँ किया जाता है। एक जोड़ी का मूल्यांकन करके तैयार किया गया दस्तावेज़ नया मान बन जाता है जिसके विरुद्ध अगले जोड़े का मूल्यांकन किया जाता है।
एक त्रुटि तब होती है जब पहला तर्क वैध JSON दस्तावेज़ नहीं है, या यदि कोई पथ तर्क मान्य पथ अभिव्यक्ति नहीं है या इसमें *
है या **
वाइल्डकार्ड।
उदाहरण 1 - एक मान डालें
इस फ़ंक्शन का उपयोग करके मान डालने का तरीका प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
परिणाम:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
इस मामले में, तीसरा तर्क निर्दिष्ट पथ पर सरणी में डाला जाता है। मैं $.c
. का उपयोग करता हूं पथ के लिए और 3
मूल्य डालने के लिए। इसके परिणामस्वरूप "c": 3
. की कुंजी/मान जोड़ी बनती है ।
यहां एक और उदाहरण दिया गया है:
SELECT JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
परिणाम:
+------------------------------------------------+ | Result | +------------------------------------------------+ | {"Age": 39, "Name": "Homer", "Gender": "Male"} | +------------------------------------------------+
उदाहरण 2 - एक मान अपडेट करें
पिछले उदाहरण ने एक मान डाला। यह उदाहरण मौजूदा मान को अपडेट करता है।
SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
परिणाम:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
यहां एक और उदाहरण दिया गया है:
SELECT JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
परिणाम:
+------------------------------------+ | Result | +------------------------------------+ | {"Name": "Bart", "Gender": "Male"} | +------------------------------------+
उदाहरण 3 - सरणी
आप मौजूदा सरणी के अंत से पहले के पथ का उपयोग करके किसी सरणी में मान सम्मिलित कर सकते हैं। उदाहरण:
SELECT JSON_SET('[1, 2, 3]', '$[3]', 4) AS 'Result';
परिणाम:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
हालांकि, यदि आप ऐसे पथ का उपयोग करते हैं जो पहले से ही सरणी में मौजूद है, तो मान अपडेट हो जाएगा:
SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) AS 'Result';
परिणाम:
+-----------+ | Result | +-----------+ | [1, 4, 3] | +-----------+
यदि मौजूदा मान एक सरणी नहीं है, तो इसे एक सरणी के रूप में स्वतः लपेटा जाता है, फिर नए मान के साथ बढ़ाया जाता है। उदाहरण:
SELECT JSON_SET('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
परिणाम:
+-----------------------+ | Result | +-----------------------+ | [{"a": 1, "b": 2}, 3] | +-----------------------+
उदाहरण 4 - एकाधिक मान
आप एक साथ कई मान सम्मिलित/अपडेट कर सकते हैं। बस प्रत्येक कुंजी/मान जोड़ी को अल्पविराम से अलग करके जोड़ें। उदाहरण:
SELECT JSON_SET('{"a": 1, "b": 2, "c": 3}', '$.a', 9, '$.c', 'Bart') AS 'Result';
परिणाम:
+-------------------------------+ | Result | +-------------------------------+ | {"a": 9, "b": 2, "c": "Bart"} | +-------------------------------+
उदाहरण 5 - एक बड़ा JSON दस्तावेज़
यहां एक (थोड़ा) बड़ा JSON दस्तावेज़ वाला एक उदाहरण दिया गया है।
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_SET(@data, '$.Person.Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Result';
परिणाम:
+-----------------------------------------------------------------+ | Result | +-----------------------------------------------------------------+ | {"Person": {"Name": "Bart", "Hobbies": ["Eating", "Mischief"]}} | +-----------------------------------------------------------------+
यह भी देखें JSON_INSERT()
मौजूदा मानों को बदले बिना मान डालने के लिए, और JSON_REPLACE()
केवल मौजूदा मानों को बदलने के लिए।