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

Các toán tử để trích xuất các thành phần con JSON

Bắt đầu với phiên bản SQLite 3.38.0 (phát hành vào ngày 22 tháng 2 năm 2022), bây giờ chúng ta có thể sử dụng ->->> toán tử để trích xuất các thành phần con của tài liệu JSON.

Mục đích của các toán tử này là tương thích với các toán tử MySQL và PostgreSQL tương đương.

Ngoài ra, bắt đầu với SQLite 3.38.0, các hàm JSON hiện đã được tích hợp sẵn. Do đó, không cần sử dụng -DSQLITE_ENABLE_JSON1 nữa tùy chọn thời gian biên dịch để bật hỗ trợ JSON.

Cú pháp

Cách thức hoạt động của các toán tử này như sau:

json -> path
json ->> path

Ở đâu json là tài liệu JSON và path là đường dẫn chúng tôi muốn trích xuất từ ​​nó.

Vì vậy, chúng tôi cung cấp một tài liệu JSON ở bên trái của toán tử và chúng tôi chỉ định đường dẫn chúng tôi muốn trích xuất ở bên phải của nó.

Sự khác biệt giữa các toán tử này như sau:

  • -> toán tử luôn trả về một biểu diễn JSON của thành phần con được chỉ định
  • ->> toán tử luôn trả về một biểu diễn SQL của thành phần con được chỉ định

Ví dụ về -> Nhà điều hành

Dưới đây là một ví dụ đơn giản để chứng minh cách -> nhà điều hành hoạt động:

SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$';

Kết quả:

{"name":"Wag","type":"Dog"}

Trong trường hợp này, tôi đã chỉ định một đường dẫn là '$' trả về toàn bộ tài liệu.

Hãy chỉ định một đường dẫn khác:

SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type';

Kết quả:

"Dog"

Chúng ta cũng có thể làm như thế này:

SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type';

Kết quả:

"Dog"

Ví dụ về ->> Nhà điều hành

Đây là những gì sẽ xảy ra khi chúng tôi sử dụng ->> thay vào đó:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type';

Kết quả:

Dog

Giá trị không được trích dẫn như trước đây. Đó là bởi vì -> trả về biểu diễn JSON của thành phần con và ->> trả về một biểu diễn SQL.

->> toán tử trả về giá trị SQL TEXT, INTEGER, REAL hoặc NULL đại diện cho thành phần con đã chọn hoặc NULL nếu thành phần con không tồn tại.

Dưới đây là một ví dụ với một mảng:

SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]';

Kết quả:

5

Nếu giá trị chỉ bao gồm một mảng, chúng ta có thể thực hiện điều này:

SELECT '[ 9, 7, 5 ]' ->> '2';

Kết quả:

5

Điều đó trả về phần tử mảng ở chỉ mục được chỉ định (trong trường hợp này là 2).

Mảng dựa trên 0 (đếm bắt đầu từ 0 ), và đó là lý do tại sao 2 trả lại mặt hàng thứ ba.


  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ách hoạt động của SQLite Trim ()

  2. Dữ liệu SQLite đến RecyclerView

  3. Ràng buộc DUY NHẤT trong SQLite

  4. Cách lấy một hàng trong SQLite theo chỉ mục (không phải theo id)

  5. SQLite - Cập nhật dữ liệu