Trong MySQL, JSON_REMOVE()
hàm xóa dữ liệu khỏi 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 để xóa dữ liệu. Bạn có thể cung cấp nhiều đường dẫn nếu cần.
Cú pháp
Cú pháp như sau:
JSON_REMOVE (json_doc, path [, path] ...)
Ở đâu json_doc
là tài liệu JSON và path
là đường dẫn để xóa dữ liệu khỏi.
path
các đối số đượ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 đường dẫn sẽ trở thành giá trị mới mà đường dẫn tiếp theo được đánh giá.
Đối số đầu tiên phải là tài liệu JSON hợp lệ, nếu không sẽ xảy ra lỗi.
Ngoài ra, path
đối số phải là một biểu thức đường dẫn hợp lệ và nó không được là $
hoặc chứa *
hoặc **
ký tự đại diện, nếu không sẽ xảy ra lỗi.
Ví dụ 1 - Cách sử dụng cơ bản
Đây là một ví dụ để chứng minh.
CHỌN JSON_REMOVE ('{"a":1, "b":2, "c":3}', '$ .b') NHƯ 'Kết quả';
Kết quả:
+ ------------------ + | Kết quả | + ------------------ + | {"a":1, "c":3} | + ------------------ +
Trong trường hợp này, chúng tôi đã xóa cặp khóa / giá trị bằng khóa của b
. Điều này là do chúng tôi đã chỉ định $.b
như đối số thứ hai.
Đây là một ví dụ khác:
SELECT JSON_REMOVE ('{"Name":"Homer", "Gender":"Male", "Age":39}', '$ .Age') AS 'Result';
Kết quả:
+ ------------------------------------- + | Kết quả | + ------------------------------------- + | {"Tên":"Homer", "Giới tính":"Nam"} | + ------------------------------- ------ +
Ví dụ 2 - Đường dẫn Không tồn tại
Nếu bạn chỉ định một đường dẫn không tồn tại, không có gì bị xóa. Tài liệu JSON gốc được trả lại mà không cần sửa đổi.
SELECT JSON_REMOVE ('{"Name":"Homer", "Age":39}', '$ .Gender') NHƯ 'Kết quả';
Kết quả:
+ ------------------------------ + | Kết quả | + ------------------------------ + | {"Tuổi":39, "Tên":"Homer"} | + ------------------------------ +Ví dụ 3 - Mảng
Đây là một ví dụ sử dụng một mảng.
CHỌN JSON_REMOVE ('[1, 2, 3]', '$ [0]') NHƯ 'Kết quả';Kết quả:
+ -------- + | Kết quả | + -------- + | [2, 3] | + -------- +Mảng sử dụng cách đánh số dựa trên 0, vì vậy trong trường hợp này, phần tử đầu tiên bị xóa khỏi mảng.
Đây là một ví dụ về mảng khác. Lần này, chúng tôi xóa một giá trị khỏi một mảng lồng nhau.
CHỌN JSON_REMOVE ('[1, 2, [3, 4, 5]]', '$ [2] [1]') NHƯ 'Kết quả';Kết quả:
+ ---------------- + | Kết quả | + ---------------- + | [1, 2, [3, 5]] | + ---------------- +Ví dụ 4 - Nhiều Đường dẫn
Bạn có thể chỉ định nhiều hơn một đường dẫn để xóa dữ liệu từ nhiều nơi trong tài liệu JSON.
Ví dụ cơ bản:
CHỌN JSON_REMOVE ('[1, 2, 3, 4, 5]', '$ [1]', '$ [3]') NHƯ 'Kết quả';Kết quả:
+ ----------- + | Kết quả | + ----------- + | [1, 3, 4] | + ----------- +Như đã đề cập,
path
các đối số được đánh giá từ trái sang phải và tài liệu được tạo ra bằng cách đánh giá một đường dẫn sẽ trở thành giá trị mới mà đường dẫn tiếp theo được đánh giá.Do đó, trong ví dụ này, đối số đường dẫn thứ 2 loại bỏ một giá trị khác với giá trị mà nó sẽ bị xóa nếu nó là đối số đường dẫn duy nhất. Nếu nó là đối số đường dẫn duy nhất, nó sẽ bị xóa
4
.Đây là ý tôi:
SELECT JSON_REMOVE ('[1, 2, 3, 4, 5]', '$ [3]') AS 'One Path', JSON_REMOVE ('[1, 2, 3, 4, 5]', ' $ [1] ',' $ [3] ') NHƯ' Hai đường dẫn ';Kết quả:
+ -------------- + ----------- + | Một con đường | Hai con đường | + -------------- + ----------- + | [1, 2, 3, 5] | [1, 3, 4] | + -------------- + ----------- +Vì vậy, bạn có thể thấy điều đó khi chúng tôi sử dụng
$[3]
là đường dẫn duy nhất, nó loại bỏ4
từ mảng. Nhưng khi chúng tôi sử dụng nó làm đường dẫn thứ 2, nó sẽ xóa5
(và4
được giữ nguyên).Một ví dụ khác, lần này là xóa các giá trị khỏi một mảng và một mảng lồng nhau:
CHỌN JSON_REMOVE ('[1, 2, [3, 4, 5]]', '$ [0]', '$ [1] [1]') NHƯ 'Kết quả';Kết quả:
+ ------------- + | Kết quả | + ------------- + | [2, [3, 5]] | + ------------- +Vì vậy, một lần nữa, mặc dù mảng ở vị trí
2
trong tài liệu gốc, giá trị đường dẫn đầu tiên ($[0]
) cắt mảng bên ngoài xuống và mảng bên trong thay đổi thành vị trí1
.Nếu điều này làm cho đầu bạn quay cuồng, bạn luôn có thể hoán đổi các đối số đường dẫn xung quanh để các giá trị ngoài cùng bên phải bị loại bỏ trước tiên. Bằng cách đó, nó sẽ không ảnh hưởng đến vị trí của các giá trị ngoài cùng bên trái và do đó, bạn có thể chỉ định các đường dẫn dựa trên tài liệu JSON gốc.
Vì vậy, chúng tôi có thể thay đổi mã trước đó thành mã sau và nhận được kết quả tương tự:
CHỌN JSON_REMOVE ('[1, 2, [3, 4, 5]]', '$ [2] [1]', '$ [0]') NHƯ 'Kết quả';Kết quả:
+ ------------- + | Kết quả | + ------------- + | [2, [3, 5]] | + ------------- +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 ='{"Người":{"Tên":"Homer", "Tuổi":39, "Sở thích":["Ăn", "Ngủ", "Nhảy cơ bản"]}}'; CHỌN JSON_REMOVE (@data, '$ .Person.Age', '$ .Person.Hobbies [2]') NHƯ 'Kết quả';Kết quả:
+ ---------------------------------------------- -------------------- + | Kết quả | + ----------------------------------------------- ------------------- + | {"Người":{"Tên":"Homer", "Sở thích":["Ăn", "Ngủ"]}} | + ------------------- ----------------------------------------------- +