Het is mogelijk om queryresultaten uit te voeren als een JSON-document bij gebruik van de SQLite-opdrachtregelinterface.
We kunnen dit doen met de json
uitvoermodus.
We kunnen ook SQLite-functies gebruiken zoals json_object()
en/of json_array()
om queryresultaten te retourneren als een JSON-document.
JSON-uitvoermodus
We kunnen de uitvoermodus als volgt wijzigen:
.mode json
Dat is alles.
Wanneer we nu een query uitvoeren, worden de resultaten uitgevoerd als een JSON-document:
SELECT * 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}]
Voor de duidelijkheid, hier is het in tabelmodus:
.mode table
Voer de query uit:
SELECT * FROM Pets;
Resultaat:
+-------+---------+--------+ | PetId | PetName | TypeId | +-------+---------+--------+ | 1 | Homer | 3 | | 2 | Yelp | 1 | | 3 | Fluff | 2 | | 4 | Brush | 4 | +-------+---------+--------+
Merk op dat de json-uitvoermodus werd geïntroduceerd in SQLite 3.33.0, die op 14 augustus 2020 werd uitgebracht.
Als u een eerdere versie van SQLite gebruikt, werken de bovenstaande voorbeelden niet voor u. Je moet upgraden naar een latere versie als je wilt dat dit werkt.
Als alternatief kunt u een JSON-functie gebruiken om het werk te doen (ervan uitgaande dat JSON-functies zijn ingeschakeld).
JSON-functies
Een andere manier om dit te doen, is door een of meer JSON-functies in onze query op te nemen, zodat deze een JSON-document retourneert.
Laten we eerst onze uitvoermodus instellen op list
:
.mode list
Laten we nu een query uitvoeren die gebruikmaakt van json_group_array()
en json_object()
om onze queryresultaten in een JSON-document te retourneren:
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}]
Hier voeren we elke rij uit als een JSON-object, en het geheel is verpakt in een JSON-array.
We kunnen de json_group_array()
. weglaten functie om elk object afzonderlijk te retourneren:
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}
In deze voorbeelden wordt ervan uitgegaan dat JSON-functies zijn ingeschakeld. Als u SQLite 3.38.0 of hoger gebruikt, moeten deze standaard zijn ingeschakeld (tenzij ze expliciet waren uitgeschakeld bij het compileren van SQLite).
Voorafgaand aan SQLite versie 3.38.0 (uitgebracht op 22 februari 2022), moesten we SQLite compileren met de SQLITE_ENABLE_JSON1
optie om de JSON-functies in de build op te nemen. Vanaf SQLite versie 3.38.0 zijn de JSON-functies echter standaard inbegrepen.