SQLite cung cấp một số chức năng để chèn, thiết lập và thay thế các giá trị trong tài liệu JSON. Cụ thể, nó cung cấp json_insert()
, json_set()
và json_replace()
.
Các hàm này thực hiện các tác vụ tương tự và đôi khi bạn có thể sử dụng chúng thay thế cho nhau đến một thời điểm nhất định.
Nhưng chắc chắn có sự khác biệt rõ ràng giữa mỗi chức năng.
Sự khác biệt
Bảng sau đây trình bày sự khác biệt giữa các chức năng này:
Hàm | Ghi đè nếu đã tồn tại? | Tạo nếu không tồn tại? |
---|---|---|
json_insert() | Không | Có |
json_replace() | Có | Không |
json_set() | Có | Có |
Vì vậy, sự khác biệt giữa các chức năng này là ở cách chúng xử lý các khóa / giá trị tồn tại và không tồn tại.
Ví dụ
Dưới đây là một số ví dụ đơn giản để chứng minh cách mỗi hàm xử lý như thế nào với các khóa / giá trị tồn tại và không tồn tại.
Khi khóa đã tồn tại
Dưới đây là cách mỗi chức năng giải quyết việc cập nhật khóa đã tồn tại:
SELECT
json_insert('{ "a" : 1 }', '$.a', 2) AS json_insert,
json_replace('{ "a" : 1 }', '$.a', 2) AS json_replace,
json_set('{ "a" : 1 }', '$.a', 2) AS json_set;
Kết quả:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | {"a":1} | {"a":2} | {"a":2} | +-------------+--------------+----------+
Chúng ta có thể thấy rằng json_insert()
không cập nhật bất cứ điều gì, nhưng hai chức năng khác đã làm.
Điều tương tự với mảng:
SELECT
json_insert('[ 1, 2, 3 ]', '$[1]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[1]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[1]', 4) AS json_set;
Kết quả:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | [1,2,3] | [1,4,3] | [1,4,3] | +-------------+--------------+----------+
Khi chìa khóa không tồn tại
Đây là những gì sẽ xảy ra khi khóa không tồn tại:
SELECT
json_insert('{ "a" : 1 }', '$.b', 2) AS json_insert,
json_replace('{ "a" : 1 }', '$.b', 2) AS json_replace,
json_set('{ "a" : 1 }', '$.b', 2) AS json_set;
Kết quả:
+---------------+--------------+---------------+ | json_insert | json_replace | json_set | +---------------+--------------+---------------+ | {"a":1,"b":2} | {"a":1} | {"a":1,"b":2} | +---------------+--------------+---------------+
Chúng ta có thể thấy rằng json_replace()
đã không chèn cặp khóa / giá trị mới, nhưng hai hàm còn lại đã thực hiện.
Tương tự với các mảng:
SELECT
json_insert('[ 1, 2, 3 ]', '$[3]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[3]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[3]', 4) AS json_set;
Kết quả:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Điều này cũng có thể được thực hiện bằng cách sử dụng [#]
đường dẫn:
SELECT
json_insert('[ 1, 2, 3 ]', '$[#]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[#]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[#]', 4) AS json_set;
Kết quả:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Một lợi ích của việc sử dụng [#]
là bạn không cần biết có bao nhiêu phần tử đã có trong mảng.