sql >> Databasteknik >  >> RDS >> SQLite

Formatera SQLite-resultat som JSON

Det är möjligt att mata ut frågeresultat som ett JSON-dokument när du använder SQLites kommandoradsgränssnitt.

Vi kan göra detta med json utgångsläge.

Vi kan också använda SQLite-funktioner som json_object() och/eller json_array() för att returnera frågeresultat som ett JSON-dokument.

JSON-utgångsläge

Vi kan ändra utgångsläget så här:

.mode json

Det är allt.

Nu när vi kör en fråga matas resultaten ut som ett JSON-dokument:

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

Bara för att vara tydlig, här är den i tabellläge:

.mode table

Kör frågan:

SELECT * FROM Pets;

Resultat:

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

Observera att json-utgångsläget introducerades i SQLite 3.33.0, som släpptes den 14 augusti 2020.

Om du använder en tidigare version av SQLite kommer exemplen ovan inte att fungera för dig. Du måste uppgradera till en senare version om du vill att detta ska fungera.

Alternativt kan du använda en JSON-funktion för att göra jobbet (förutsatt att JSON-funktioner är aktiverade).

JSON-funktioner

Ett annat sätt att göra det är att införliva en eller flera JSON-funktioner i vår fråga så att den returnerar ett JSON-dokument.

Låt oss först ställa in vårt utdataläge till list :

.mode list

Låt oss nu köra en fråga som använder json_group_array() och json_object() för att returnera våra sökresultat i ett JSON-dokument:

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

Här matar vi ut varje rad som ett JSON-objekt, och det hela lindas in i en JSON-array.

Vi kan utelämna json_group_array() funktion för att returnera varje objekt för sig:

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}

Dessa exempel förutsätter att JSON-funktioner är aktiverade. Om du använder SQLite 3.38.0 eller senare bör dessa vara aktiverade som standard (såvida de inte uttryckligen inaktiverades när SQLite kompilerades).

Innan SQLite version 3.38.0 (släpptes den 22 februari 2022) behövde vi kompilera SQLite med SQLITE_ENABLE_JSON1 alternativet för att inkludera JSON-funktionerna i byggnaden. Men från och med SQLite version 3.38.0 ingår JSON-funktionerna som standard.


  1. Anslutningssträngparametrar för textfilkällor

  2. Byt namn på en användardefinierad datatyp i SQL Server (T-SQL)

  3. Hur kastar jag en sträng till heltal och har 0 vid fel i casten med PostgreSQL?

  4. Installera Oracle Database Client steg för steg