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}]