SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite JSON_OBJECT()

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