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

JSON_SET () - Chèn hoặc cập nhật giá trị trong tài liệu JSON trong MySQL

Trong MySQL, JSON_SET() hàm chèn hoặc cập nhật các giá trị trong tài liệu JSON và trả về kết quả.

Bạn cung cấp tài liệu JSON làm đối số đầu tiên, theo sau là đường dẫn để chèn vào, tiếp theo là giá trị để chèn. Bạn có thể cung cấp nhiều cặp đường dẫn / giá trị nếu bạn cần cập nhật nhiều giá trị.

Cú pháp

Cú pháp như sau:

 JSON_SET (json_doc, path, val [, path, val] ...) 

Ở đâu:

  • json_doc là tài liệu JSON.
  • path là đường dẫn của phần tử để chèn dữ liệu hoặc cập nhật giá trị tại đó.
  • val là giá trị mới.

Các cặp giá trị-đường dẫn được đánh giá từ trái sang phải. Tài liệu được tạo ra bằng cách đánh giá một cặp sẽ trở thành giá trị mới mà cặp tiếp theo được đánh giá.

Lỗi xảy ra nếu đối số đầu tiên không phải là tài liệu JSON hợp lệ hoặc nếu bất kỳ đối số đường dẫn nào không phải là biểu thức đường dẫn hợp lệ hoặc chứa * hoặc ** ký tự đại diện.

Ví dụ 1 - Chèn giá trị

Dưới đây là một ví dụ để minh họa cách chèn giá trị bằng hàm này.

 SELECT JSON_SET ('{"a":1, "b":2}', '$ .c', 3) NHƯ 'Kết quả'; 

Kết quả:

 + -------------------------- + | Kết quả | + -------------------------- + | {"a":1, "b":2, "c":3} | + -------------------------- +  

Trong trường hợp này, đối số thứ 3 được chèn vào mảng tại đường dẫn được chỉ định. Tôi sử dụng $.c cho đường dẫn và 3 cho giá trị được chèn. Điều này dẫn đến một cặp khóa / giá trị là "c": 3 .

Đây là một ví dụ khác:

 SELECT JSON_SET ('{"Name":"Homer", "Gender":"Male"}', '$ .Age', 39) AS 'Result'; 

Kết quả:

 + ---------------------------------------------- - + | Kết quả | + ----------------------------------------------- - + | {"Tuổi":39, "Tên":"Homer", "Giới tính":"Nam"} | + -------------------------- ----------------------- + 

Ví dụ 2 - Cập nhật giá trị

Ví dụ trước đã chèn một giá trị. Ví dụ này cập nhật một giá trị hiện có.

 SELECT JSON_SET ('{"a":1, "b":2}', '$ .b', 3) NHƯ 'Kết quả'; 

Kết quả:

 + ------------------ + | Kết quả | + ------------------ + | {"a":1, "b":3} | + ------------------ + 

Đây là một ví dụ khác:

 SELECT JSON_SET ('{"Name":"Homer", "Gender":"Male"}', '$ .Name', "Bart") AS 'Result'; 

Kết quả:

 + ------------------------------------ + | Kết quả | + ------------------------------------ + | {"Tên":"Bart", "Giới tính":"Nam"} | + ------------------------------- ----- + 

Ví dụ 3 - Mảng

Bạn có thể chèn các giá trị vào một mảng bằng cách sử dụng một đường dẫn ở cuối mảng hiện có. Ví dụ:

 SELECT JSON_SET ('[1, 2, 3]', '$ [3]', 4) AS 'Result'; 

Kết quả:

 + -------------- + | Kết quả | + -------------- + | [1, 2, 3, 4] | + -------------- + 

Tuy nhiên, nếu bạn sử dụng một đường dẫn đã tồn tại trong mảng, giá trị sẽ được cập nhật:

 SELECT JSON_SET ('[1, 2, 3]', '$ [1]', 4) AS 'Result'; 

Kết quả:

 + ----------- + | Kết quả | + ----------- + | [1, 4, 3] | + ----------- + 

Nếu giá trị hiện có không phải là một mảng, nó sẽ được tự động gói lại dưới dạng một mảng, sau đó được mở rộng với giá trị mới. Ví dụ:

 SELECT JSON_SET ('{"a":1, "b":2}', '$ [2]', 3) NHƯ 'Kết quả'; 

Kết quả:

 + ----------------------- + | Kết quả | + ----------------------- + | [{"a":1, "b":2}, 3] | + ----------------------- + 

Ví dụ 4 - Nhiều giá trị

Bạn có thể chèn / cập nhật nhiều giá trị cùng một lúc. Chỉ cần thêm từng cặp khóa / giá trị được phân tách bằng dấu phẩy. Ví dụ:

 SELECT JSON_SET ('{"a":1, "b":2, "c":3}', '$ .a', 9, '$ .c', 'Bart') NHƯ 'Kết quả'; 

Kết quả:

 + ------------------------------- + | Kết quả | + ------------------------------- + | {"a":9, "b":2, "c":"Bart"} | + --------------------------- ---- + 

Ví dụ 5 - Tài liệu JSON lớn hơn

Dưới đây là một ví dụ với tài liệu JSON lớn hơn (một chút).

 SET @data ='{"Person":{"Name":"Homer", "Hobbies":["Ăn", "Ngủ"]}}'; CHỌN JSON_SET (@data, '$ .Person. Tên ',' Bart ',' $ .Person.Hobbies [1] ', "Nghịch ngợm") NHƯ' Kết quả '; 

Kết quả:

 + ---------------------------------------------- ------------------- + | Kết quả | + ----------------------------------------------- ------------------ + | {"Người":{"Tên":"Bart", "Sở thích":["Ăn uống", "Nghịch ngợm"]}} | + ------------------- ---------------------------------------------- +  

Cũng xem JSON_INSERT() để chèn các giá trị mà không thay thế các giá trị hiện có và JSON_REPLACE() để chỉ thay thế các giá trị hiện có.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tắt ONLY_FULL_GROUP_BY

  2. Nhân bản, sao chép hoặc sao lưu bảng trong MySQL, MariaDB, Oracle, PostgreSQL, DB2 và SQLite với Tạo bảng dưới dạng SQL

  3. MySQL tự động truyền / chuyển đổi một chuỗi thành một số?

  4. Chạy một truy vấn mySQL như một công việc cron?

  5. Lỗi MySQL 1449:Người dùng được chỉ định làm trình xác định không tồn tại