SQLite
 sql >> Baza danych >  >> RDS >> SQLite

SQLite JSON_OBJECT()

SQLite json_object() funkcja zwraca poprawnie sformatowany obiekt JSON na podstawie jego argumentów.

Funkcja akceptuje zero lub więcej par argumentów i zwraca prawidłowo sformatowany obiekt JSON na podstawie tych argumentów.

Składnia

json_object(label1,value1,...)

Gdzie label1, value2, ... reprezentuje pary etykieta/wartość.

Przykład

Oto prosty przykład do zademonstrowania:

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

Wynik:

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

Przekazywanie obiektów JSON

Przekazanie argumentu z typem SQL typu TEXT powoduje powstanie ciągu JSON w cudzysłowie, ze znakami ucieczki wszystkich etykiet w cudzysłowie:

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

Wynik:

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

Jeśli nie chcemy, aby tak się stało, możemy użyć json() funkcja do podania wartości jako prawidłowego dokumentu JSON:

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

Wynik:

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

Innym sposobem na to jest użycie -> SQLite operator:

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

Wynik:

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

Alternatywnie możemy użyć innego json_object() funkcja:

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

Wynik:

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

Oto kilka innych wartości:

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

Wynik:

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

Przekazywanie tablic JSON

Podobnie jest z przekazywaniem tablic JSON:

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

Wynik:

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

W tym przypadku wartością jest ciąg przypominający tablicę.

Aby zwrócić rzeczywistą tablicę JSON, możemy przekazać nasz argument do json() funkcja:

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

Wynik:

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

Możemy również użyć -> operator:

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

Wynik:

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

Alternatywnie możemy przekazać wartości do json_array() funkcja:

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

Wynik:

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

Oto kilka innych par nazwa/wartość:

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

Wynik:

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

Utwórz pusty obiekt

Wywołanie json_object() bez przekazywania żadnych argumentów powoduje powstanie pustego obiektu:

SELECT json_object();

Wynik:

{}

Zduplikowane etykiety

W chwili pisania tego tekstu json_object() akceptuje zduplikowane etykiety bez problemu. Dlatego możemy robić takie rzeczy:

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

Wynik:

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

Ale dokumentacja SQLite informuje, że nie zawsze tak jest – przyszłe wersje SQLite mogą nie obsługiwać takich scenariuszy.

Przykład bazy danych

Możemy użyć json_object() podczas pobierania danych z bazy danych.

Załóżmy, że uruchamiamy następujące zapytanie:

SELECT * FROM Pets;

Wynik:

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

Widzimy, że są trzy kolumny i widzimy ich nazwy.

Możemy użyć json_object() funkcjonować na tym stole w ten sposób:

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

Wynik:

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

Tutaj wyraźnie określiłem nazwy etykiet, a następnie jako wartości użyłem rzeczywistych kolumn z bazy danych. Każdy wiersz staje się dokumentem JSON, a każda kolumna staje się parą klucz/wartość w tym dokumencie JSON.

Możemy również użyć json_group_array() funkcja zamykająca dokumenty w tablicy:

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

Wynik:

[{"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. sqlLiteDatabase.query() dla INNER JOIN

  2. Biblioteka pokoju może skopiować db z folderu zasobów?

  3. Pobieranie danych z bazy danych sql we flutter datewise?

  4. JSON_INSERT() vs JSON_SET() vs JSON_REPLACE() w SQLite

  5. Jak działa SQLite Random()