Trong MySQL, JSON_MERGE_PRESERVE()
hàm hợp nhất hai hoặc nhiều tài liệu JSON và trả về kết quả.
Bạn cung cấp các tài liệu JSON dưới dạng đối số.
Hàm này đã được thêm vào MySQL 8.0.3 dưới dạng từ đồng nghĩa với JSON_MERGE()
, tuy nhiên, JSON_MERGE()
hàm hiện không được dùng nữa và có thể bị xóa trong bản phát hành MySQL trong tương lai.
Cú pháp
Cú pháp như sau:
JSON_MERGE_PRESERVE (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.
Nếu bất kỳ đối số nào là NULL
, hàm này trả về NULL
.
Ví dụ 1 - Cách sử dụng cơ bản
Đây là một ví dụ để chứng minh.
SELECT JSON_MERGE_PRESERVE ('{"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.
Đây chính xác là kết quả mà chúng tôi nhận được nếu sử dụng
JSON_MERGE_PATCH()
hàm số. Tuy nhiên, nếu chúng tôi cố gắng hợp nhất các khóa trùng lặp, hai hàm này sẽ tạo ra các kết quả khác nhau.Ví dụ 2 - Các khóa trùng lặp
Như tên cho thấy,
JSON_MERGE_PRESERVE()
hàm bảo toàn các thành viên có khóa trùng lặp (đây là nơi nó khác vớiJSON_MERGE_PATCH()
chức năng).SELECT JSON_MERGE_PRESERVE ('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Kết quả;Kết quả:
+ ----------------------------------- + | Kết quả | + ----------------------------------- + | {"Tên":["Bartholomew", "Bart"]} | + -------------------------------------------------- - +Vì vậy, trong trường hợp này, một mảng đã được tạo và cả Bart và Bartholomew đều được thêm vào dưới dạng các phần tử riêng biệt của mảng đó.
Điều này trái ngược với
JSON_MERGE_PATCH()
chức năng này thực hiện những việc sau:SELECT JSON_MERGE_PATCH ('{"Name":"Bartholomew"}', '{"Name":"Bart"}') Kết quả;Kết quả:
+ ------------------ + | Kết quả | + ------------------ + | {"Tên":"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_PRESERVE ('{"Name":"Bartholomew", "Age":10}', '{"Name":"Bart"}') Kết quả;Kết quả:
+ ---------------------------------------------- + | Kết quả | + ---------------------------------------------- + | {"Tuổi":10, "Tên":["Bartholomew", "Bart"]} | + --------------------------- ------------------- +Đ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_PRESERVE ('{"Name":"Bartholomew"}', '{"Name":"Bart", "Age":10}') Kết quả;Kết quả:
+ ---------------------------------------------- + | Kết quả | + ---------------------------------------------- + | {"Tuổi":10, "Tên":["Bartholomew", "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_PRESERVE ('{"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
Dưới đây là một ví dụ về việc hợp nhất hai mảng có cùng tên:
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"]} | + ----------------------------- -------------------------- +Đây là một ví dụ khác trong đó
JSON_MERGE_PATCH()
sẽ trả về một kết quả khác.Rõ ràng, nếu các mảng có tên khác nhau, chúng sẽ kết thúc dưới dạng các mảng riêng biệt (nhưng trong cùng một tài liệu JSON):
SELECT JSON_MERGE_PRESERVE ('{"Sở thích":["Rắc rối", "Nghịch ngợm"]}', '{"Sở thích":["Trượt ván"]}') Kết quả;Kết quả:
+ ---------------------------------------------- -------------------- + | Kết quả | + ----------------------------------------------- ------------------- + | {"Sở thích":["Trượt ván"], "Sở thích":["Rắc rối", "Nghịch ngợm"]} | + ----------------------- ------------------------------------------- +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 "]," Sở thích ":[" Rắc rối "]}} '; CHỌN JSON_MERGE_PRESERVE (@ 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", "Rắc rối"], "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.