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

SQLite JSON_REMOVE ()

Chúng ta có thể sử dụng SQLite json_remove() chức năng xóa một hoặc nhiều phần tử khỏi đối tượng hoặc mảng JSON.

Chúng tôi chuyển JSON ban đầu làm đối số đầu tiên khi chúng tôi gọi hàm, theo sau là một hoặc nhiều đường dẫn chỉ định phần tử nào cần loại bỏ. Theo "phần tử", tôi có nghĩa là phần tử mảng hoặc thành viên đối tượng (cặp khóa / giá trị).

Cú pháp

Cú pháp như sau:

json_remove(X,P,...)

Ở đâu X đại diện cho JSON gốc và P,... đại diện cho / các đường dẫn để xóa.

Ví dụ

Dưới đây là một ví dụ để chứng minh:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');

Kết quả:

{"name":"Fluffy"}

Ở đây, chúng tôi đã chỉ định $.age và đó là những gì đã bị xóa khỏi tài liệu JSON.

Xóa nhiều thành viên

Chúng tôi có thể xóa nhiều thành viên khỏi một đối tượng JSON bằng cách chỉ định nhiều đường dẫn, được phân tách bằng dấu phẩy:

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }', 
    '$.type',
    '$.age'
);

Kết quả:

{"name":"Fluffy"}

Mảng

Chúng tôi có thể xóa các phần tử mảng bằng cách chỉ định chỉ mục của phần tử:

SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');

Kết quả:

[0,1,3]

Mảng dựa trên 0 và do đó, việc đếm bắt đầu từ 0 .

Tuy nhiên, điều quan trọng là phải lưu ý đến thứ tự thực hiện các thao tác xóa. Việc xóa diễn ra tuần tự từ trái sang phải. Những thay đổi do lần xóa trước gây ra có thể ảnh hưởng đến việc tìm kiếm đường dẫn cho các đối số tiếp theo.

Dưới đây là một ví dụ về cách điều đó có thể ảnh hưởng đến kết quả của chúng tôi:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[0]',
    '$[2]'
);

Kết quả:

[1,2]

Trong trường hợp này, phần tử mảng 0 đã bị xóa đầu tiên, sau đó đến phần tử mảng 2 đã bị xóa khỏi mảng còn lại. Nói cách khác, đường dẫn thứ hai đã xóa phần tử khỏi mảng sau khi đường dẫn đầu tiên đã bị xóa.

Mảng kết quả là mảng mà chúng ta có thể không lường trước được. Thay vì xóa các phần tử 02 khỏi mảng ban đầu, chúng tôi đã xóa các phần tử 03 từ mảng ban đầu.

Chúng tôi có thể khắc phục sự cố này bằng cách sắp xếp lại các đường dẫn:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[2]',
    '$[0]'
);

Kết quả:

[1,3]

Không có đường dẫn

Các đối số đường dẫn thực sự là tùy chọn. Nếu chúng ta gọi json_remove() không có đối số đường dẫn, nó trả về phiên bản rút gọn của JSON đầu vào (tức là đã loại bỏ khoảng trắng dư thừa):

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }'
);

Kết quả:

{"name":"Fluffy","type":"Cat","age":10}

Đây là kết quả tương tự mà chúng tôi sẽ nhận được nếu chúng tôi sử dụng json() hàm thay vì json_remove() .

Đường dẫn không tồn tại

Việc chỉ định một đường dẫn không tồn tại trong JSON đầu vào dẫn đến JSON ban đầu được trả về, không thay đổi:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');

Kết quả:

{"name":"Fluffy","age":10}

Đường dẫn không hợp lệ

Chúng tôi sẽ gặp lỗi nếu đường dẫn của chúng tôi không đúng:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');

Kết quả:

Runtime error: JSON path error near 'age'

Trong trường hợp này, tôi đã quên bao gồm $. ở phía trước của con đường.

Tài liệu JSON không hợp lệ

Chúng tôi cũng sẽ gặp lỗi do JSON không được định dạng tốt:

SELECT json_remove('{ "name" : "Fluffy", "age" }', '$.age');

Kết quả:

Runtime error: malformed JSON

Lần này, lỗi cho chúng tôi biết rằng JSON của chúng tôi không đúng định dạ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. Tìm giá trị không chứa số trong SQLite

  2. Làm cách nào để có được số hàng trong sqlite bằng Android?

  3. Làm thế nào để đồng bộ hóa với cơ sở dữ liệu cục bộ và phân tích cú pháp?

  4. Cách khôi phục cơ sở dữ liệu Sqlite sau khi sao lưu Android

  5. Định dạng chuỗi thời gian hợp lệ cho các hàm ngày / giờ của SQLite