Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

JSON_MERGE_PATCH () - Thực hiện hợp nhất tài liệu JSON tuân thủ RFC 7396 trong MySQL

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ến Name vào một mảng chứa cả BartholomewBart . 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PolyScale.ai - Mở rộng MySQL &PostgreSQL với Global Caching

  2. Sự cố với các loại nội dung khi tải một vật cố định trong Django

  3. Ví dụ SECOND () - MySQL

  4. MyISAM so với InnoDB

  5. Dịch vụ cơ sở dữ liệu MySQL - Cải tiến mới của HeatWave