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

JSON_INSERT () - Chèn giá trị vào tài liệu JSON trong MySQL

Trong MySQL, JSON_INSERT() hàm chèn một giá trị vào 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.

Cú pháp

Cú pháp như sau:

 JSON_INSERT (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 giá trị mới vào.
  • val là giá trị mới sẽ được chèn.

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á.

Ví dụ 1 - Cách sử dụng cơ bản

Đây là một ví dụ để chứng minh.

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

Kết quả:

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

Vì vậy, đối số thứ 3 được chèn vào mảng tại đường dẫn được chỉ định. Trong trường hợp này, 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_INSERT ('{"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ố gắng ghi đè một đường dẫn hiện có

Cặp giá trị-đường dẫn cho đường dẫn hiện có trong tài liệu bị bỏ qua và không ghi đè giá trị tài liệu hiện có.

Vì vậy, nếu chúng ta sửa đổi ví dụ trước để chèn một giá trị tại Name (đã tồn tại), không diễn ra chèn:

 SELECT JSON_INSERT ('{"Name":"Homer", "Gender":"Male"}', '$ .Name', "Bart") NHƯ 'Kết quả'; 

Kết quả:

 + ------------------------------------- + | Kết quả | + ------------------------------------- + | {"Tên":"Homer", "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ụ:

 CHỌN JSON_INSERT ('[1, 2, 3]', '$ [3]', 4) NHƯ 'Kết quả'; 

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, mảng sẽ không thay đổi:

 CHỌN JSON_INSERT ('[1, 2, 3]', '$ [1]', 4) NHƯ 'Kết quả'; 

Kết quả:

 + ----------- + | Kết quả | + ----------- + | [1, 2, 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_INSERT ('{"a":1, "b":2}', '$ [2]', 3) NHƯ 'Kết quả'; 

Kết quả:

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

Nhưng một lần nữa, nếu bạn cố gắng chèn một giá trị tại một đường dẫn đã tồn tại, thì tài liệu JSON vẫn không thay đổi:

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

Kết quả:

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

Ví dụ 4 - 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_INSERT (@data, '$ .Person. Sở thích [2] ', "Nhảy cơ bản") NHƯ' Kết quả '; 

Kết quả:

 + ---------------------------------------------- ------------------------------------ + | Kết quả | + ----------------------------------------------- ----------------------------------- + | {"Người":{"Tên":"Homer", "Sở thích":["Ăn", "Ngủ", "Nhảy cơ bản"]}} | + -------------- -------------------------------------------------- ------------------ + 

Cũng xem JSON_ARRAY_INSERT()JSON_ARRAY_APPEND() nếu bạn cần chèn hoặc nối dữ liệu vào một mảng JSON.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xuất cơ sở dữ liệu bằng phpMyAdmin

  2. Cách thiết kế cơ sở dữ liệu mysql nhiều người thuê

  3. Toán tử này <=> trong MySQL là gì?

  4. Cách sao chép bảng trong MySQL

  5. Xuất bảng từ Amazon RDS thành tệp CSV