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

Formater SQLite-resultater som JSON

Det er muligt at udlæse forespørgselsresultater som et JSON-dokument, når du bruger SQLite-kommandolinjegrænsefladen.

Vi kan gøre dette med json udgangstilstand.

Vi kan også bruge SQLite-funktioner som json_object() og/eller json_array() for at returnere forespørgselsresultater som et JSON-dokument.

JSON-outputtilstand

Vi kan ændre output-tilstanden sådan her:

.mode json

Det er alt.

Når vi nu kører en forespørgsel, udlæses resultaterne som et 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}]

Bare for at være klar, her er den i tabeltilstand:

.mode table

Kør forespørgslen:

SELECT * FROM Pets;

Resultat:

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

Bemærk, at json-outputtilstanden blev introduceret i SQLite 3.33.0, som blev udgivet den 14. august 2020.

Hvis du bruger en tidligere version af SQLite, vil ovenstående eksempler ikke fungere for dig. Du skal opgradere til en nyere version, hvis du ønsker, at dette skal virke.

Alternativt kan du bruge en JSON-funktion til at udføre jobbet (forudsat at JSON-funktioner er aktiveret).

JSON-funktioner

En anden måde at gøre det på er at inkorporere en eller flere JSON-funktioner i vores forespørgsel, så den returnerer et JSON-dokument.

Lad os først indstille vores outputtilstand til list :

.mode list

Lad os nu køre en forespørgsel, der bruger json_group_array() og json_object() for at returnere vores forespørgselsresultater i et 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}]

Her udsender vi hver række som et JSON-objekt, og det hele er pakket ind i et JSON-array.

Vi kan udelade json_group_array() funktion for at returnere hvert objekt for 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}

Disse eksempler antager, at JSON-funktioner er aktiveret. Hvis du bruger SQLite 3.38.0 eller nyere, bør disse være aktiveret som standard (medmindre de eksplicit blev deaktiveret ved kompilering af SQLite).

Før SQLite version 3.38.0 (frigivet den 22. februar 2022) var vi nødt til at kompilere SQLite med SQLITE_ENABLE_JSON1 mulighed for at inkludere JSON-funktionerne i build. Men fra og med SQLite version 3.38.0 er JSON-funktionerne inkluderet som standard.


  1. Transactionscope-undtagelse denne platform understøtter ikke distribuerede transaktioner, mens forbindelsesobjekt åbnes

  2. generere dage fra datointerval

  3. Sådan indsætter du store mængder data i sqlite-databasen i Android

  4. Jeg kan ikke starte SQL Server-browseren