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