Trong MySQL, JSON_MERGE_PATCH()
hàm thực hiện hợp nhất tuân thủ RFC 7396 của hai hoặc nhiều tài liệu JSON, mà không bảo toàn các thành viên có khóa trùng lặp.
Bạn cung cấp các tài liệu JSON dưới dạng đối số.
Cú pháp
Cú pháp như sau:
JSON_MERGE_PATCH (json_doc, json_doc [, json_doc] ...)
Ở đâu json_doc
là các tài liệu JSON sẽ được hợp nhất. Nếu bất kỳ tài liệu nào không hợp lệ, lỗi sẽ xảy ra.
Ví dụ 1 - Cách sử dụng cơ bản
Đây là một ví dụ để chứng minh.
SELECT JSON_MERGE_PATCH ('{"Name":"Homer"}', '{"Age":39}') Kết quả;
Kết quả:
+ ------------------------------ + | Kết quả | + ------------------------------ + | {"Tuổi":39, "Tên":"Homer"} | + ------------------------------ +Vì vậy, trong ví dụ này, chúng tôi đã hợp nhất hai đối tượng riêng biệt thành một đối tượng.
Ví dụ 2 - Các khóa trùng lặp
Như đã đề cập, chức năng này không lưu giữ các thành viên có khóa trùng lặp. Ví dụ:
SELECT JSON_MERGE_PATCH ('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Kết quả;Kết quả:
+ ------------------ + | Kết quả | + ------------------ + | {"Tên":"Bart"} | + ------------------ +Vì vậy, trong trường hợp này, Bart đã thắng.
Nếu bạn cần bảo tồn các thành viên có khóa trùng lặp, hãy sử dụng
JSON_MERGE_PRESERVE()
chức năng thay thế. Sử dụng hàm đó cho ví dụ này sẽ biếnName
vào một mảng chứa cảBartholomew
vàBart
. Như thế này:SELECT JSON_MERGE_PRESERVE ('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Kết quả;Kết quả:
+ ----------------------------------- + | Kết quả | + ----------------------------------- + | {"Tên":["Bartholomew", "Bart"]} | + -------------------------------------------------- - +Ví dụ 3 - Nhiều thành viên
Đây là một ví dụ khác, nhưng có thêm một thành viên trong đối tượng:
SELECT JSON_MERGE_PATCH ('{"Name":"Bartholomew", "Age":10}', '{"Name":"Bart"}') Kết quả;Kết quả:
+ ----------------------------- + | Kết quả | + ----------------------------- + | {"Tuổi":10, "Tên":"Bart"} | + ----------------------------- +Vì vậy, Bart vẫn thắng và anh ta đã được hợp nhất với các thành viên khác của đối tượng đầu tiên.
Tất nhiên, điều này cũng hoạt động theo chiều ngược lại - kết quả cũng giống như vậy nếu chúng ta thêm thành viên bổ sung vào đối tượng thứ hai.
SELECT JSON_MERGE_PATCH ('{"Name":"Bartholomew"}', '{"Name":"Bart", "Age":10}') Kết quả;Kết quả:
+ ----------------------------- + | Kết quả | + ----------------------------- + | {"Tuổi":10, "Tên":"Bart"} | + ----------------------------- +Ví dụ 4 - Tài liệu khác
Bạn không bị giới hạn khi chỉ hợp nhất hai tài liệu. Bạn có thể hợp nhất nhiều cái nếu cần. Dưới đây là một ví dụ về hợp nhất ba đối tượng.
SELECT JSON_MERGE_PATCH ('{"Name":"Bart"}', '{"Age":10}', '{"Hair Color":"Yellow"}') Kết quả;Kết quả:
+ ---------------------------------------------- ------- + | Kết quả | + ----------------------------------------------- ------ + | {"Tuổi":10, "Tên":"Bart", "Màu tóc":"Vàng"} | + ------------------------ ----------------------------- +Ví dụ 5 - Mảng
Việc hợp nhất hai mảng có cùng tên sẽ chỉ dẫn đến một trong số chúng được giữ nguyên:
SELECT JSON_MERGE_PATCH ('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Kết quả;Kết quả:
+ -------------------------------- + | Kết quả | + -------------------------------- + | {"Sở thích":["Trượt ván"]} | + -------------------------------- +Một lần nữa, bạn có thể sử dụng
JSON_MERGE_PRESERVE()
nếu bạn cần bảo toàn cả hai mảng. Vì vậy, ví dụ trước có thể được viết lại thành sau:SELECT JSON_MERGE_PRESERVE ('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Kết quả;Kết quả:
+ ---------------------------------------------- --------- + | Kết quả | + ----------------------------------------------- -------- + | {"Sở thích":["Rắc rối", "Nghịch ngợm", "Trượt ván"]} | + ----------------------------- -------------------------- +Ví dụ 6 - Tài liệu JSON lớn hơn
Dưới đây là một ví dụ hợp nhất các tài liệu JSON lớn hơn (một chút).
SET @ data1 ='{"Nghi phạm":{"Tên":"Bart", "Sở thích":["Trượt ván", "Nghịch ngợm"]}}', @ data2 ='{"Nghi phạm":{" Tuổi ":10," Cha mẹ ":[" Marge "," Homer "]}} '; SELECT JSON_MERGE_PATCH (@ data1, @ data2) Kết quả;Kết quả:
+ ---------------------------------------------- -------------------------------------------------- ------------------- + | Kết quả | + ----------------------------------------------- -------------------------------------------------- ------------------ + | {"Nghi phạm":{"Tuổi":10, "Tên":"Bart", "Sở thích":["Trượt ván", "Nghịch ngợm"], "Cha mẹ":["Marge", "Homer"]}} | + ------------------------------------------------- -------------------------------------------------- ---------------- +Để biết các quy tắc chính xác về cách hàm này thực hiện hợp nhất, hãy xem tài liệu MySQL.