sql >> Databasteknik >  >> RDS >> SQLite

SQLite JSON_OBJECT()

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 -> operatör:

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

  1. Hur man konverterar en sträng till ett numeriskt värde i PostgreSQL

  2. Hur man startar PostgreSQL Server på Mac OS X via Homebrew

  3. MySQL autoinkrement-kolumn hoppar med 10- varför?

  4. Hur Exp()-funktionen fungerar i PostgreSQL