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