sql >> Database >  >> RDS >> SQLite

SQLite JSON_OBJECT()

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

  1. Maximale grootte voor een SQL Server-query? IN clausule? Is er een betere aanpak?

  2. Verschil tussen deze twee benaderingen van samenvoegingstafels?

  3. Ik ben het wachtwoord vergeten dat ik tijdens de installatie van postgre heb ingevoerd

  4. Opgeslagen procedures en functies retourneren in een SQL Server-database:ROUTINES (T-SQL-voorbeelden)