sql >> Database teknologi >  >> RDS >> SQLite

SQLite JSON_OBJECT()

SQLite json_object() funktion returnerer et velformet JSON-objekt baseret på dets argumenter.

Funktionen accepterer nul eller flere par af argumenter og returnerer et velformet JSON-objekt baseret på disse argumenter.

Syntaks

json_object(label1,value1,...)

Hvor etiket1, værdi2, ... repræsenterer etiket/værdi-parrene.

Eksempel

Her er et simpelt eksempel til at demonstrere:

SELECT json_object( "name", "Igor", "age", 35 );

Resultat:

{"name":"Igor","age":35}

Beståelse af JSON-objekter

Sending af et argument med SQL-typen TEXT resulterer i en citeret JSON-streng, hvor alle etiketter med anførselstegn escapes:

SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' );

Resultat:

{"user":"{ \"name\" : \"igor\", \"age\" : 35 }"}

Hvis vi ikke ønsker, at dette skal ske, kan vi bruge json() funktion til at angive værdien som et gyldigt JSON-dokument:

SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') );

Resultat:

{"user":{"name":"igor","age":35}}

En anden måde at gøre det på er at bruge SQLites -> operatør:

SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' );

Resultat:

{"user":{"name":"igor","age":35}}

Alternativt kan vi bruge en anden json_object() funktion:

SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) );

Resultat:

{"user":{"name":"Igor","age":35}}

Her er det med nogle andre værdier:

SELECT json_object( 
    "a", 1, 
    "user", json_object( "name", "Igor", "age", 35 ), 
    "b", 2 
    );

Resultat:

{"a":1,"user":{"name":"Igor","age":35},"b":2}

Beståer JSON-arrays

Det er en lignende ting, når du sender JSON-arrays:

SELECT json_object( "scores", '[ 9, 4, 7 ]' );

Resultat:

{"scores":"[ 9, 4, 7 ]"}

I dette tilfælde er værdien en streng, der ligner en matrix.

For at returnere et faktisk JSON-array kan vi videregive vores argument til json() funktion:

SELECT json_object( "scores", json('[ 9, 4, 7 ]') );

Resultat:

{"scores":[9,4,7]}

Vi kan også bruge -> operatør:

SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' );

Resultat:

{"scores":[9,4,7]}

Alternativt kan vi sende værdierne til json_array() funktion:

SELECT json_object( "scores", json_array( 9, 4, 7 ) );

Resultat:

{"scores":[9,4,7]}

Her er den med nogle andre navne/værdipar:

SELECT json_object( 
    "name", "Bruno", 
    "scores", json_array( 9, 4, 7 ), 
    "age", 25 
    );

Resultat:

{"name":"Bruno","scores":[9,4,7],"age":25}

Opret et tomt objekt

Kalder json_object() uden at sende nogen argumenter resulterer det i et tomt objekt:

SELECT json_object();

Resultat:

{}

Dublerede etiketter

I skrivende stund, json_object() accepterer duplikerede etiketter uden problemer. Derfor kan vi gøre ting som dette:

SELECT json_object( "b", 1, "b", 2 );

Resultat:

{"b":1,"b":2}

Men SQLites dokumentation anbefaler, at dette ikke altid er tilfældet - fremtidige versioner af SQLite understøtter muligvis ikke sådanne scenarier.

Databaseeksempel

Vi kan bruge json_object() når du henter data fra en database.

Antag, at vi kører følgende forespørgsel:

SELECT * FROM Pets;

Resultat:

+-------+---------+--------+
| PetId | PetName | TypeId |
+-------+---------+--------+
| 1     | Homer   | 3      |
| 2     | Yelp    | 1      |
| 3     | Fluff   | 2      |
| 4     | Brush   | 4      |
+-------+---------+--------+

Vi kan se, at der er tre kolonner, og vi kan se deres navne.

Vi kan bruge json_object() funktion på den tabel som denne:

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}

Her specificerede jeg eksplicit etiketnavnene og brugte derefter de faktiske kolonner fra databasen til værdierne. Hver række bliver et JSON-dokument, og hver kolonne bliver et nøgle/værdi-par i det pågældende JSON-dokument.

Vi kan også bruge json_group_array() funktion til at indkapsle dokumenterne i et 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. PostgreSQL-indeks på JSON

  2. Guide til designdatabase til opgavehåndtering i MySQL

  3. MySQL Hurtigt tip:Brug kommandoen DROP USER

  4. Sådan fungerer WEEKOFYEAR() i MariaDB