De SQLite json_object() functie retourneert een goed gevormd JSON-object op basis van zijn argumenten.
De functie accepteert nul of meer paren argumenten en retourneert een goed gevormd JSON-object op basis van die argumenten.
Syntaxis
json_object(label1,value1,...)
Waar label1, value2, ... vertegenwoordigt de label/waarde-paren.
Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren:
SELECT json_object( "name", "Igor", "age", 35 ); Resultaat:
{"name":"Igor","age":35} JSON-objecten doorgeven
Het doorgeven van een argument met het SQL-type TEXT resulteert in een JSON-tekenreeks tussen aanhalingstekens, waarbij eventuele labels tussen aanhalingstekens worden geëscaped:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' ); Resultaat:
{"user":"{ \"name\" : \"igor\", \"age\" : 35 }"}
Als we niet willen dat dit gebeurt, kunnen we de json() . gebruiken functie om de waarde op te geven als een geldig JSON-document:
SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') ); Resultaat:
{"user":{"name":"igor","age":35}}
Een andere manier om dit te doen is door SQLite's -> . te gebruiken operator:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' ); Resultaat:
{"user":{"name":"igor","age":35}}
Als alternatief kunnen we een andere json_object() . gebruiken functie:
SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) ); Resultaat:
{"user":{"name":"Igor","age":35}} Hier is het met enkele andere waarden:
SELECT json_object(
"a", 1,
"user", json_object( "name", "Igor", "age", 35 ),
"b", 2
); Resultaat:
{"a":1,"user":{"name":"Igor","age":35},"b":2} JSON-arrays doorgeven
Hetzelfde geldt voor het doorgeven van JSON-arrays:
SELECT json_object( "scores", '[ 9, 4, 7 ]' ); Resultaat:
{"scores":"[ 9, 4, 7 ]"} In dit geval is de waarde een string die lijkt op een array.
Om een daadwerkelijke JSON-array terug te geven, kunnen we ons argument doorgeven aan de json() functie:
SELECT json_object( "scores", json('[ 9, 4, 7 ]') ); Resultaat:
{"scores":[9,4,7]}
We kunnen ook de -> . gebruiken operator:
SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' ); Resultaat:
{"scores":[9,4,7]}
Als alternatief kunnen we de waarden doorgeven aan de json_array() functie:
SELECT json_object( "scores", json_array( 9, 4, 7 ) ); Resultaat:
{"scores":[9,4,7]} Hier is het met enkele andere naam/waarde-paren:
SELECT json_object(
"name", "Bruno",
"scores", json_array( 9, 4, 7 ),
"age", 25
); Resultaat:
{"name":"Bruno","scores":[9,4,7],"age":25} Maak een leeg object
json_object() . aanroepen zonder het doorgeven van argumenten resulteert in een leeg object:
SELECT json_object(); Resultaat:
{} Labels dupliceren
Op het moment van schrijven, json_object() accepteert zonder problemen dubbele labels. Daarom kunnen we dit soort dingen doen:
SELECT json_object( "b", 1, "b", 2 ); Resultaat:
{"b":1,"b":2} Maar de documentatie van SQLite geeft aan dat dit niet altijd het geval hoeft te zijn - toekomstige versies van SQLite ondersteunen dergelijke scenario's mogelijk niet.
Databasevoorbeeld
We kunnen json_object() . gebruiken bij het ophalen van gegevens uit een database.
Stel dat we de volgende query uitvoeren:
SELECT * FROM Pets; Resultaat:
+-------+---------+--------+ | PetId | PetName | TypeId | +-------+---------+--------+ | 1 | Homer | 3 | | 2 | Yelp | 1 | | 3 | Fluff | 2 | | 4 | Brush | 4 | +-------+---------+--------+
We kunnen zien dat er drie kolommen zijn en we kunnen hun namen zien.
We kunnen de json_object() . gebruiken functioneren op die tafel als volgt:
SELECT json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
FROM Pets; Resultaat:
{"PetId":1,"PetName":"Homer","TypeId":3}
{"PetId":2,"PetName":"Yelp","TypeId":1}
{"PetId":3,"PetName":"Fluff","TypeId":2}
{"PetId":4,"PetName":"Brush","TypeId":4} Hier heb ik expliciet de labelnamen gespecificeerd en vervolgens de werkelijke kolommen uit de database voor de waarden gebruikt. Elke rij wordt een JSON-document en elke kolom wordt een sleutel/waarde-paar in dat JSON-document.
We kunnen ook de json_group_array() . gebruiken functie om de documenten in een array te omsluiten:
SELECT json_group_array(
json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
)
FROM Pets; Resultaat:
[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{"PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brush","TypeId":4}]