MySQL menyertakan sejumlah fungsi untuk bekerja dengan dokumen JSON. Di antaranya adalah JSON_MERGE_PATCH()
dan JSON_MERGE_PRESERVE()
fungsi.
Kedua fungsi ini menggabungkan dua atau lebih dokumen JSON dan mengembalikan hasilnya. Namun, ada kasus tertentu di mana fungsi ini akan mengembalikan hasil yang berbeda. Anda harus mengetahui hal ini sebelum memasukkannya ke dalam kueri Anda.
Sintaks
Pertama, inilah sintaks untuk setiap fungsi:
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...) JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)
Dimana json_doc
adalah dokumen JSON yang akan digabungkan.
Jadi kedua fungsi menerima dua atau lebih argumen, masing-masing mewakili dokumen JSON yang akan digabungkan.
Perbedaan
Kedua fungsi bekerja persis sama, dengan dua pengecualian berikut:
JSON_MERGE_PATCH()
menghapus setiap anggota di objek pertama dengan kunci yang cocok di objek kedua, asalkan nilai yang terkait dengan kunci di objek kedua bukan JSON null.- Jika objek kedua memiliki anggota dengan kunci yang cocok dengan anggota di objek pertama,
JSON_MERGE_PATCH()
menggantikan nilai pada objek pertama dengan nilai pada objek kedua, sedangkanJSON_MERGE_PRESERVE()
menambahkan nilai kedua ke nilai pertama.
Jadi pada dasarnya, mereka berbeda dalam cara menangani kunci duplikat.
Contoh
Berikut adalah contoh untuk menunjukkan perbedaan antara kedua fungsi ini.
SELECT JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart"}') JSON_MERGE_PATCH, JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart"}') JSON_MERGE_PRESERVE;
Hasil:
+------------------+-----------------------------------+ | JSON_MERGE_PATCH | JSON_MERGE_PRESERVE | +------------------+-----------------------------------+ | {"Name": "Bart"} | {"Name": ["Bartholomew", "Bart"]} | +------------------+-----------------------------------+
Kita dapat melihat bahwa JSON_MERGE_PATCH()
menggantikan nilai objek pertama (Bartholomew
) dengan nilai objek kedua (Bart
).
JSON_MERGE_PRESERVE()
di sisi lain, membuat array dan mengisinya dengan kedua nilai.
Contoh 2 – Array
Berikut ini contoh menggabungkan dua array dengan nama yang sama:
SELECT JSON_MERGE_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') JSON_MERGE_PATCH, JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') JSON_MERGE_PRESERVE;
Hasil:
+--------------------------------+-------------------------------------------------------+ | JSON_MERGE_PATCH | JSON_MERGE_PRESERVE | +--------------------------------+-------------------------------------------------------+ | {"Hobbies": ["Skateboarding"]} | {"Hobbies": ["Trouble", "Mischief", "Skateboarding"]} | +--------------------------------+-------------------------------------------------------+
Jadi dalam hal ini, JSON_MERGE_PATCH()
telah mengganti semua elemen di larik pertama dengan elemen di larik kedua.
JSON_MERGE_PRESERVE()
baru saja menggabungkan nilai dari kedua array menjadi satu.
Jelas, jika array memiliki nama yang berbeda, mereka akan berakhir sebagai array terpisah (tetapi dalam dokumen JSON yang sama). Jadi dalam kasus seperti itu, kedua fungsi akan mengembalikan hasil yang sama.
SELECT JSON_MERGE_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobby": ["Skateboarding"]}') AS Result UNION ALL SELECT JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobby": ["Skateboarding"]}');
Hasil:
+------------------------------------------------------------------+ | Result | +------------------------------------------------------------------+ | {"Hobby": ["Skateboarding"], "Hobbies": ["Trouble", "Mischief"]} | | {"Hobby": ["Skateboarding"], "Hobbies": ["Trouble", "Mischief"]} | +------------------------------------------------------------------+