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

SQLite JSON_PATCH ()

Trong SQLite, json_patch() có thể được sử dụng để thêm, sửa đổi hoặc xóa các phần tử của một Đối tượng JSON.

Để thực hiện việc này, nó chạy thuật toán MergePatch RFC-7396 để áp dụng một bản vá nhất định so với đầu vào JSON đã cho.

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, tiếp theo là bản vá. Sau đó, hàm áp dụng bản vá đó chống lại JSON trong đối số đầu tiên.

Cú pháp

Cú pháp như sau:

json_patch(T,P)

Ở đâu T đại diện cho JSON gốc và P là bản vá. Chức năng áp dụng bản vá P chống lại T .

Nội dung của bản vá được cung cấp P được so sánh với nội dung hiện tại của tài liệu JSON đích T . Nếu P chứa các thành viên không xuất hiện trong T , những thành viên đó được thêm vào. Nếu T không chứa thành viên, giá trị được thay thế.

Giá trị rỗng trong P được đưa ra ý nghĩa đặc biệt để chỉ ra việc loại bỏ các giá trị hiện có trong T .

Ví dụ

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

Chèn

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

Kết quả:

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

Cố gắng chèn một thành viên mới với giá trị null không hoạt động:

SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }');

Kết quả:

{"name":"Fluffy"}

Giá trị rỗng thực sự được sử dụng để xóa các thành viên khỏi JSON (như được thấy trong ví dụ sau).

Cập nhật

SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }');

Kết quả:

{"name":"Baldy"}

Nếu có nhiều cặp khóa / giá trị nhưng chúng tôi chỉ muốn cập nhật một cặp, chúng tôi chỉ cần chỉ định cặp đó trong đối số thứ hai của chúng tôi:

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

Kết quả:

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

Khái niệm tương tự cũng áp dụng khi cập nhật nhiều cặp khóa / giá trị - chúng tôi chỉ cần chỉ định những cặp khóa / giá trị đó:

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

Kết quả:

{"name":"Baldy","type":"Cat","age":11}

Cập nhật &Chèn

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

Kết quả:

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

Xóa / Xóa

Các giá trị rỗng trong bản vá hợp nhất có ý nghĩa đặc biệt để chỉ ra việc loại bỏ các giá trị hiện có trong đích:

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

Kết quả:

{"name":"Fluffy"}

Mảng

json_patch() hàm không thể nối các phần tử vào một mảng, cũng như không thể sửa đổi các phần tử riêng lẻ của một mảng. Nó chỉ có thể chèn, thay thế hoặc xóa toàn bộ mảng như một đơn vị duy nhất.

Vì vậy, đây là một ví dụ về việc thêm một phần tử vào một mảng:

SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]');

Kết quả:

[1,2,3,4]

Tôi đã phải thay thế mảng ban đầu bằng một mảng hoàn toàn mới. Vì vậy, về mặt kỹ thuật, tôi không thực sự nối thêm bất cứ thứ gì - tôi chỉ đơn giản là thay thế toàn bộ mảng bằng một mảng khác.

Khái niệm tương tự cũng áp dụng nếu mảng nằm trong một đối tượng:

SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }');

Kết quả:

{"scores":[1,2,3,4]}

Nếu bạn cần làm việc với mảng, hãy thử các hàm như json_set() , json_insert() , json_remove()json_replace() thay vào đó.

Thay thế một đối tượng bằng một mảng

Chúng ta có thể thay thế các đối tượng bằng một mảng bằng cách chỉ cần cung cấp một mảng làm bản vá:

SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]');

Kết quả:

["Fluffy",10]

Thay thế một mảng bằng một đối tượng

Và nó cũng hoạt động theo cách khác:

SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }');

Kết quả:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật tất cả các hàng trong một cột thành giá trị mới

  2. Bao gồm tên cột trong kết quả truy vấn SQLite

  3. SQLite MAX

  4. Không thể ngăn rò rỉ đối tượng SQLiteConnection

  5. SQLiteException sử dụng WHERE + KEY_Date + ='+ date +'