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

SQLite JSON_OBJECT ()

SQLite json_object() hàm trả về một đối tượng JSON được định dạng tốt dựa trên các đối số của nó.

Hàm chấp nhận không hoặc nhiều cặp đối số và trả về một đối tượng JSON được định dạng tốt dựa trên các đối số đó.

Cú pháp

json_object(label1,value1,...)

Trong đó label1, value2, ... đại diện cho các cặp nhãn / giá trị.

Ví dụ

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

SELECT json_object( "name", "Igor", "age", 35 );

Kết quả:

{"name":"Igor","age":35}

Truyền các đối tượng JSON

Truyền một đối số với kiểu SQL TEXT dẫn đến một chuỗi JSON được trích dẫn, với bất kỳ nhãn được trích dẫn nào đều được thoát:

SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' );

Kết quả:

{"user":"{ \"name\" : \"igor\", \"age\" : 35 }"}

Nếu không muốn điều này xảy ra, chúng ta có thể sử dụng json() chức năng cung cấp giá trị dưới dạng tài liệu JSON hợp lệ:

SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') );

Kết quả:

{"user":{"name":"igor","age":35}}

Một cách khác để làm điều đó là sử dụng -> của SQLite nhà điều hành:

SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' );

Kết quả:

{"user":{"name":"igor","age":35}}

Ngoài ra, chúng ta có thể sử dụng một json_object() khác chức năng:

SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) );

Kết quả:

{"user":{"name":"Igor","age":35}}

Đây là với một số giá trị khác:

SELECT json_object( 
    "a", 1, 
    "user", json_object( "name", "Igor", "age", 35 ), 
    "b", 2 
    );

Kết quả:

{"a":1,"user":{"name":"Igor","age":35},"b":2}

Truyền các mảng JSON

Điều tương tự khi chuyển các mảng JSON:

SELECT json_object( "scores", '[ 9, 4, 7 ]' );

Kết quả:

{"scores":"[ 9, 4, 7 ]"}

Trong trường hợp này, giá trị là một chuỗi giống với một mảng.

Để trả về một mảng JSON thực, chúng ta có thể chuyển đối số của mình vào json() chức năng:

SELECT json_object( "scores", json('[ 9, 4, 7 ]') );

Kết quả:

{"scores":[9,4,7]}

Chúng tôi cũng có thể sử dụng -> nhà điều hành:

SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' );

Kết quả:

{"scores":[9,4,7]}

Ngoài ra, chúng ta có thể chuyển các giá trị vào json_array() chức năng:

SELECT json_object( "scores", json_array( 9, 4, 7 ) );

Kết quả:

{"scores":[9,4,7]}

Đây là nó với một số cặp tên / giá trị khác:

SELECT json_object( 
    "name", "Bruno", 
    "scores", json_array( 9, 4, 7 ), 
    "age", 25 
    );

Kết quả:

{"name":"Bruno","scores":[9,4,7],"age":25}

Tạo một đối tượng rỗng

Đang gọi json_object() mà không chuyển bất kỳ đối số nào dẫn đến một đối tượng trống:

SELECT json_object();

Kết quả:

{}

Nhãn trùng lặp

Tại thời điểm viết bài, json_object() chấp nhận các nhãn trùng lặp mà không có vấn đề gì. Do đó, chúng tôi có thể làm những việc như sau:

SELECT json_object( "b", 1, "b", 2 );

Kết quả:

{"b":1,"b":2}

Nhưng tài liệu của SQLite khuyên rằng điều này có thể không phải lúc nào cũng vậy - các phiên bản SQLite trong tương lai có thể không hỗ trợ các tình huống như vậy.

Ví dụ về cơ sở dữ liệu

Chúng ta có thể sử dụng json_object() khi lấy dữ liệu từ cơ sở dữ liệu.

Giả sử chúng ta chạy truy vấn sau:

SELECT * FROM Pets;

Kết quả:

+-------+---------+--------+
| PetId | PetName | TypeId |
+-------+---------+--------+
| 1     | Homer   | 3      |
| 2     | Yelp    | 1      |
| 3     | Fluff   | 2      |
| 4     | Brush   | 4      |
+-------+---------+--------+

Chúng ta có thể thấy rằng có ba cột và chúng ta có thể thấy tên của chúng.

Chúng ta có thể sử dụng json_object() chức năng trên bảng đó như thế này:

SELECT json_object( 
    'PetId', PetId, 
    'PetName', PetName,
    'TypeId', TypeId 
    )
FROM Pets;

Kết quả:

{"PetId":1,"PetName":"Homer","TypeId":3}
{"PetId":2,"PetName":"Yelp","TypeId":1}
{"PetId":3,"PetName":"Fluff","TypeId":2}
{"PetId":4,"PetName":"Brush","TypeId":4}

Ở đây, tôi đã chỉ định rõ ràng các tên nhãn, sau đó sử dụng các cột thực từ cơ sở dữ liệu cho các giá trị. Mỗi hàng trở thành một tài liệu JSON và mỗi cột trở thành một cặp khóa / giá trị trong tài liệu JSON đó.

Chúng tôi cũng có thể sử dụng json_group_array() hàm để mã hóa các tài liệu trong một mảng:

SELECT json_group_array( 
        json_object(
        'PetId', PetId, 
        'PetName', PetName,
        'TypeId', TypeId 
        )
    )
FROM Pets;

Kết quả:

[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{"PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brush","TypeId":4}]

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xuất cơ sở dữ liệu SQLite thành tệp XML

  2. Lưu trữ cơ sở dữ liệu SQLite bằng Android và Phonegap

  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. PowerManager.PARTIAL_WAKE_LOCK android

  5. Chèn dữ liệu JSON vào cơ sở dữ liệu SQLite trong Android