MySQL में JSON दस्तावेज़ों के साथ काम करने के लिए कई फ़ंक्शन शामिल हैं। इनमें से JSON_MERGE_PATCH() हैं और JSON_MERGE_PRESERVE() कार्य।
ये दोनों फ़ंक्शन दो या अधिक JSON दस्तावेज़ों को मर्ज करते हैं और परिणाम लौटाते हैं। हालांकि, ऐसे कुछ मामले हैं जहां ये फ़ंक्शन एक अलग परिणाम लौटाएंगे। अपने किसी भी प्रश्न में उन्हें शामिल करने से पहले आपको इसके बारे में पता होना चाहिए।
सिंटैक्स
सबसे पहले, यहां प्रत्येक फ़ंक्शन के लिए सिंटैक्स दिया गया है:
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...) JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)
जहां json_doc मर्ज किए जाने वाले JSON दस्तावेज़ हैं।
इसलिए दोनों फ़ंक्शन दो या दो से अधिक तर्कों को स्वीकार करते हैं, जिनमें से प्रत्येक मर्ज किए जाने वाले JSON दस्तावेज़ों का प्रतिनिधित्व करते हैं।
अंतर
निम्नलिखित दो अपवादों के साथ दोनों फ़ंक्शन बिल्कुल समान कार्य करते हैं:
JSON_MERGE_PATCH()पहली ऑब्जेक्ट में किसी भी सदस्य को दूसरी ऑब्जेक्ट में मिलान कुंजी के साथ हटा देता है, बशर्ते कि दूसरी ऑब्जेक्ट में कुंजी से संबद्ध मान JSON नल न हो।- यदि दूसरी वस्तु में एक सदस्य है जिसकी कुंजी पहली वस्तु में एक सदस्य से मेल खाती है,
JSON_MERGE_PATCH()पहली वस्तु के मान को दूसरी वस्तु के मान से बदल देता है, जबकिJSON_MERGE_PRESERVE()दूसरे मान को पहले मान में जोड़ता है।
इसलिए मूल रूप से, वे डुप्लीकेट कुंजियों को संभालने के तरीके में भिन्न हैं।
उदाहरण
इन दो कार्यों के बीच अंतर को प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
SELECT
JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart"}') JSON_MERGE_PATCH,
JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart"}') JSON_MERGE_PRESERVE;
परिणाम:
+------------------+-----------------------------------+
| JSON_MERGE_PATCH | JSON_MERGE_PRESERVE |
+------------------+-----------------------------------+
| {"Name": "Bart"} | {"Name": ["Bartholomew", "Bart"]} |
+------------------+-----------------------------------+
हम देख सकते हैं कि JSON_MERGE_PATCH() पहली वस्तु के मूल्य को बदल दिया (Bartholomew ) दूसरे ऑब्जेक्ट मान के साथ (Bart )।
JSON_MERGE_PRESERVE() दूसरी ओर, एक सरणी बनाई और इसे दोनों मानों से भर दिया।
उदाहरण 2 - सरणी
यहां एक ही नाम के दो सरणियों को मर्ज करने का एक उदाहरण दिया गया है:
SELECT
JSON_MERGE_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') JSON_MERGE_PATCH,
JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') JSON_MERGE_PRESERVE;
परिणाम:
+--------------------------------+-------------------------------------------------------+
| JSON_MERGE_PATCH | JSON_MERGE_PRESERVE |
+--------------------------------+-------------------------------------------------------+
| {"Hobbies": ["Skateboarding"]} | {"Hobbies": ["Trouble", "Mischief", "Skateboarding"]} |
+--------------------------------+-------------------------------------------------------+
तो इस मामले में, JSON_MERGE_PATCH() पहली सरणी के सभी तत्वों को दूसरी सरणी के तत्व से बदल दिया है।
JSON_MERGE_PRESERVE() बस दोनों सरणियों के मानों को एक में मिला दिया है।
जाहिर है, अगर सरणियों के अलग-अलग नाम हैं, तो वे अलग-अलग सरणियों के रूप में समाप्त होंगे (लेकिन एक ही JSON दस्तावेज़ के भीतर)। तो ऐसे मामलों में, दोनों फ़ंक्शन एक ही परिणाम देंगे।
SELECT
JSON_MERGE_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobby": ["Skateboarding"]}') AS Result
UNION ALL
SELECT
JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobby": ["Skateboarding"]}');
परिणाम:
+------------------------------------------------------------------+
| Result |
+------------------------------------------------------------------+
| {"Hobby": ["Skateboarding"], "Hobbies": ["Trouble", "Mischief"]} |
| {"Hobby": ["Skateboarding"], "Hobbies": ["Trouble", "Mischief"]} |
+------------------------------------------------------------------+