Il json_object() di SQLite La funzione restituisce un oggetto JSON ben formato in base ai suoi argomenti.
La funzione accetta zero o più coppie di argomenti e restituisce un oggetto JSON ben formato basato su tali argomenti.
Sintassi
json_object(label1,value1,...)
Dove label1, value2, ... rappresenta le coppie etichetta/valore.
Esempio
Ecco un semplice esempio da dimostrare:
SELECT json_object( "name", "Igor", "age", 35 ); Risultato:
{"name":"Igor","age":35} Trasferimento di oggetti JSON
Il passaggio di un argomento con tipo SQL TEXT genera una stringa JSON tra virgolette, con l'escape di tutte le etichette tra virgolette:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' ); Risultato:
{"user":"{ \"name\" : \"igor\", \"age\" : 35 }"}
Se non vogliamo che ciò accada, possiamo usare json() funzione per fornire il valore come documento JSON valido:
SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') ); Risultato:
{"user":{"name":"igor","age":35}}
Un altro modo per farlo è usare -> di SQLite operatore:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' ); Risultato:
{"user":{"name":"igor","age":35}}
In alternativa, possiamo usare un altro json_object() funzione:
SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) ); Risultato:
{"user":{"name":"Igor","age":35}} Eccolo con alcuni altri valori:
SELECT json_object(
"a", 1,
"user", json_object( "name", "Igor", "age", 35 ),
"b", 2
); Risultato:
{"a":1,"user":{"name":"Igor","age":35},"b":2} Passaggio di array JSON
È una cosa simile quando si passano gli array JSON:
SELECT json_object( "scores", '[ 9, 4, 7 ]' ); Risultato:
{"scores":"[ 9, 4, 7 ]"} In questo caso, il valore è una stringa che assomiglia a una matrice.
Per restituire un vero array JSON, possiamo passare il nostro argomento a json() funzione:
SELECT json_object( "scores", json('[ 9, 4, 7 ]') ); Risultato:
{"scores":[9,4,7]}
Possiamo anche usare il -> operatore:
SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' ); Risultato:
{"scores":[9,4,7]}
In alternativa, possiamo passare i valori a json_array() funzione:
SELECT json_object( "scores", json_array( 9, 4, 7 ) ); Risultato:
{"scores":[9,4,7]} Eccolo con alcune altre coppie nome/valore:
SELECT json_object(
"name", "Bruno",
"scores", json_array( 9, 4, 7 ),
"age", 25
); Risultato:
{"name":"Bruno","scores":[9,4,7],"age":25} Crea un oggetto vuoto
Chiamando json_object() senza passare alcun argomento risulta in un oggetto vuoto:
SELECT json_object(); Risultato:
{} Etichette duplicate
Al momento della scrittura, json_object() accetta etichette duplicate senza problemi. Pertanto, possiamo fare cose come questa:
SELECT json_object( "b", 1, "b", 2 ); Risultato:
{"b":1,"b":2} Ma la documentazione di SQLite avverte che potrebbe non essere sempre così:le versioni future di SQLite potrebbero non supportare tali scenari.
Esempio di database
Possiamo usare json_object() quando si recuperano dati da un database.
Supponiamo di eseguire la seguente query:
SELECT * FROM Pets; Risultato:
+-------+---------+--------+ | PetId | PetName | TypeId | +-------+---------+--------+ | 1 | Homer | 3 | | 2 | Yelp | 1 | | 3 | Fluff | 2 | | 4 | Brush | 4 | +-------+---------+--------+
Possiamo vedere che ci sono tre colonne e possiamo vedere i loro nomi.
Possiamo usare json_object() funzione su quella tabella in questo modo:
SELECT json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
FROM Pets; Risultato:
{"PetId":1,"PetName":"Homer","TypeId":3}
{"PetId":2,"PetName":"Yelp","TypeId":1}
{"PetId":3,"PetName":"Fluff","TypeId":2}
{"PetId":4,"PetName":"Brush","TypeId":4} Qui, ho specificato esplicitamente i nomi delle etichette, quindi ho utilizzato le colonne effettive del database per i valori. Ogni riga diventa un documento JSON e ogni colonna diventa una coppia chiave/valore in quel documento JSON.
Possiamo anche usare json_group_array() funzione per racchiudere i documenti in un array:
SELECT json_group_array(
json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
)
FROM Pets; Risultato:
[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{"PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brush","TypeId":4}]