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

JSON_REMOVE () - Xóa dữ liệu khỏi tài liệu JSON trong MySQL

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óa 5 (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ủ"]}} | + ------------------- ----------------------------------------------- +  
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Errno 150

  2. Làm cách nào để tìm dữ liệu không tồn tại từ một Bảng khác bằng cách tham gia?

  3. Cách cài đặt MySQL Workbench trên Ubuntu

  4. Cách cài đặt MySQL 8 với Workbench trên Windows 10

  5. Hiểu các giao dịch mysql pdo