Das SQLite json_object() Funktion gibt basierend auf ihren Argumenten ein wohlgeformtes JSON-Objekt zurück.
Die Funktion akzeptiert null oder mehr Argumentpaare und gibt basierend auf diesen Argumenten ein wohlgeformtes JSON-Objekt zurück.
Syntax
json_object(label1,value1,...)
Wobei label1, value2, ... repräsentiert die Label/Wert-Paare.
Beispiel
Hier ist ein einfaches Beispiel zur Veranschaulichung:
SELECT json_object( "name", "Igor", "age", 35 ); Ergebnis:
{"name":"Igor","age":35} JSON-Objekte übergeben
Das Übergeben eines Arguments mit dem SQL-Typ TEXT führt zu einer JSON-Zeichenfolge in Anführungszeichen, wobei alle in Anführungszeichen gesetzten Bezeichnungen maskiert werden:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' ); Ergebnis:
{"user":"{ \"name\" : \"igor\", \"age\" : 35 }"}
Wenn wir das nicht wollen, können wir den json() verwenden Funktion, um den Wert als gültiges JSON-Dokument bereitzustellen:
SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') ); Ergebnis:
{"user":{"name":"igor","age":35}}
Eine andere Möglichkeit ist die Verwendung von -> von SQLite Betreiber:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' ); Ergebnis:
{"user":{"name":"igor","age":35}}
Alternativ können wir ein anderes json_object() verwenden Funktion:
SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) ); Ergebnis:
{"user":{"name":"Igor","age":35}} Hier ist es mit einigen anderen Werten:
SELECT json_object(
"a", 1,
"user", json_object( "name", "Igor", "age", 35 ),
"b", 2
); Ergebnis:
{"a":1,"user":{"name":"Igor","age":35},"b":2} JSON-Arrays übergeben
Ähnlich verhält es sich beim Übergeben von JSON-Arrays:
SELECT json_object( "scores", '[ 9, 4, 7 ]' ); Ergebnis:
{"scores":"[ 9, 4, 7 ]"} In diesem Fall ist der Wert ein String, der einem Array ähnelt.
Um ein tatsächliches JSON-Array zurückzugeben, können wir unser Argument an json() übergeben Funktion:
SELECT json_object( "scores", json('[ 9, 4, 7 ]') ); Ergebnis:
{"scores":[9,4,7]}
Wir können auch den -> verwenden Betreiber:
SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' ); Ergebnis:
{"scores":[9,4,7]}
Alternativ können wir die Werte an json_array() übergeben Funktion:
SELECT json_object( "scores", json_array( 9, 4, 7 ) ); Ergebnis:
{"scores":[9,4,7]} Hier ist es mit einigen anderen Name/Wert-Paaren:
SELECT json_object(
"name", "Bruno",
"scores", json_array( 9, 4, 7 ),
"age", 25
); Ergebnis:
{"name":"Bruno","scores":[9,4,7],"age":25} Leeres Objekt erstellen
Aufruf von json_object() ohne Übergabe von Argumenten ergibt sich ein leeres Objekt:
SELECT json_object(); Ergebnis:
{} Doppelte Labels
Zum Zeitpunkt des Schreibens war json_object() akzeptiert doppelte Etiketten ohne Probleme. Daher können wir Dinge wie diese tun:
SELECT json_object( "b", 1, "b", 2 ); Ergebnis:
{"b":1,"b":2} Die SQLite-Dokumentation weist jedoch darauf hin, dass dies möglicherweise nicht immer der Fall ist – zukünftige Versionen von SQLite unterstützen solche Szenarien möglicherweise nicht.
Datenbankbeispiel
Wir können json_object() verwenden beim Abrufen von Daten aus einer Datenbank.
Angenommen, wir führen die folgende Abfrage aus:
SELECT * FROM Pets; Ergebnis:
+-------+---------+--------+ | PetId | PetName | TypeId | +-------+---------+--------+ | 1 | Homer | 3 | | 2 | Yelp | 1 | | 3 | Fluff | 2 | | 4 | Brush | 4 | +-------+---------+--------+
Wir können sehen, dass es drei Spalten gibt, und wir können ihre Namen sehen.
Wir können das json_object() verwenden Funktion auf dieser Tabelle wie folgt:
SELECT json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
FROM Pets; Ergebnis:
{"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 habe ich explizit die Labelnamen angegeben und dann die tatsächlichen Spalten aus der Datenbank für die Werte verwendet. Jede Zeile wird zu einem JSON-Dokument und jede Spalte zu einem Schlüssel/Wert-Paar in diesem JSON-Dokument.
Wir können auch json_group_array() verwenden Funktion, um die Dokumente in ein Array einzuschließen:
SELECT json_group_array(
json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
)
FROM Pets; Ergebnis:
[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{"PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brush","TypeId":4}]