sql >> Database >  >> RDS >> SQLite

Formatteer SQLite-resultaten als JSON

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.


  1. Getallen opmaken in MySQL

  2. Retourwaarde van de opdracht SQL Server Insert met c#

  3. Introductie van afspelen:nieuwe tijddiagnose voor Spotlight Cloud

  4. Wat is het verschil tussen bindvariabelen en substitutievariabelen (die ik invoer met &&)?