SQLite json_object()
funktion returnerar ett välformat JSON-objekt baserat på dess argument.
Funktionen accepterar noll eller fler par av argument och returnerar ett välformat JSON-objekt baserat på dessa argument.
Syntax
json_object(label1,value1,...)
Där etikett1, värde2, ...
representerar etikett/värdeparen.
Exempel
Här är ett enkelt exempel att visa:
SELECT json_object( "name", "Igor", "age", 35 );
Resultat:
{"name":"Igor","age":35}
Passerar JSON-objekt
Att skicka ett argument med SQL-typ TEXT resulterar i en citerad JSON-sträng, där alla etiketter med citattecken escapes:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' );
Resultat:
{"user":"{ \"name\" : \"igor\", \"age\" : 35 }"}
Om vi inte vill att detta ska hända kan vi använda json()
funktion för att tillhandahålla värdet som ett giltigt JSON-dokument:
SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') );
Resultat:
{"user":{"name":"igor","age":35}}
Ett annat sätt att göra det är att använda SQLites ->
operatör:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' );
Resultat:
{"user":{"name":"igor","age":35}}
Alternativt kan vi använda en annan json_object()
funktion:
SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) );
Resultat:
{"user":{"name":"Igor","age":35}}
Här är den med några andra värden:
SELECT json_object(
"a", 1,
"user", json_object( "name", "Igor", "age", 35 ),
"b", 2
);
Resultat:
{"a":1,"user":{"name":"Igor","age":35},"b":2}
Passerar JSON-arrayer
Det är en liknande sak när man skickar JSON-arrayer:
SELECT json_object( "scores", '[ 9, 4, 7 ]' );
Resultat:
{"scores":"[ 9, 4, 7 ]"}
I det här fallet är värdet en sträng som liknar en array.
För att returnera en faktisk JSON-array kan vi skicka vårt argument till json()
funktion:
SELECT json_object( "scores", json('[ 9, 4, 7 ]') );
Resultat:
{"scores":[9,4,7]}
Vi kan också använda
SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' );
Resultat:
{"scores":[9,4,7]}
Alternativt kan vi skicka värdena till json_array()
funktion:
SELECT json_object( "scores", json_array( 9, 4, 7 ) );
Resultat:
{"scores":[9,4,7]}
Här är den med några andra namn/värdepar:
SELECT json_object(
"name", "Bruno",
"scores", json_array( 9, 4, 7 ),
"age", 25
);
Resultat:
{"name":"Bruno","scores":[9,4,7],"age":25}
Skapa ett tomt objekt
Anropar json_object()
utan att skicka några argument resulterar i ett tomt objekt:
SELECT json_object();
Resultat:
{}
Duplicera etiketter
I skrivande stund, json_object()
accepterar dubbletter av etiketter utan problem. Därför kan vi göra så här:
SELECT json_object( "b", 1, "b", 2 );
Resultat:
{"b":1,"b":2}
Men SQLites dokumentation visar att detta kanske inte alltid är fallet – framtida versioner av SQLite kanske inte stöder sådana scenarier.
Databasexempel
Vi kan använda json_object()
när du hämtar data från en databas.
Anta att vi kör följande fråga:
SELECT * FROM Pets;
Resultat:
+-------+---------+--------+ | PetId | PetName | TypeId | +-------+---------+--------+ | 1 | Homer | 3 | | 2 | Yelp | 1 | | 3 | Fluff | 2 | | 4 | Brush | 4 | +-------+---------+--------+
Vi kan se att det finns tre kolumner, och vi kan se deras namn.
Vi kan använda json_object()
fungerar på den tabellen så här:
SELECT json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
FROM Pets;
Resultat:
{"PetId":1,"PetName":"Homer","TypeId":3} {"PetId":2,"PetName":"Yelp","TypeId":1} {"PetId":3,"PetName":"Fluff","TypeId":2} {"PetId":4,"PetName":"Brush","TypeId":4}
Här specificerade jag uttryckligen etikettnamnen och använde sedan de faktiska kolumnerna från databasen för värdena. Varje rad blir ett JSON-dokument, och varje kolumn blir ett nyckel/värdepar i det JSON-dokumentet.
Vi kan också använda json_group_array()
funktion för att omsluta dokumenten i en array:
SELECT json_group_array(
json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
)
FROM Pets;
Resultat:
[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{"PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brush","TypeId":4}]