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()
và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.