SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Formatieren Sie SQLite-Ergebnisse als JSON

Es ist möglich, Abfrageergebnisse als JSON-Dokument auszugeben, wenn Sie die SQLite-Befehlszeilenschnittstelle verwenden.

Wir können dies mit dem json tun Ausgabemodus.

Wir können auch SQLite-Funktionen wie json_object() verwenden und/oder json_array() um Abfrageergebnisse als JSON-Dokument zurückzugeben.

JSON-Ausgabemodus

Wir können den Ausgabemodus wie folgt ändern:

.mode json

Das ist alles.

Wenn wir jetzt eine Abfrage ausführen, werden die Ergebnisse als JSON-Dokument ausgegeben:

SELECT * FROM Pets;

Ergebnis:

[{"PetId":1,"PetName":"Homer","TypeId":3},
{"PetId":2,"PetName":"Yelp","TypeId":1},
{"PetId":3,"PetName":"Fluff","TypeId":2},
{"PetId":4,"PetName":"Brush","TypeId":4}]

Nur um das klarzustellen, hier ist es im Tabellenmodus:

.mode table

Führen Sie die Abfrage aus:

SELECT * FROM Pets;

Ergebnis:

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

Beachten Sie, dass der json-Ausgabemodus in SQLite 3.33.0 eingeführt wurde, das am 14. August 2020 veröffentlicht wurde.

Wenn Sie eine frühere Version von SQLite verwenden, funktionieren die obigen Beispiele nicht für Sie. Sie müssen auf eine neuere Version aktualisieren, wenn Sie möchten, dass dies funktioniert.

Alternativ könnten Sie eine JSON-Funktion verwenden, um die Aufgabe zu erledigen (vorausgesetzt, JSON-Funktionen sind aktiviert).

JSON-Funktionen

Eine andere Möglichkeit besteht darin, eine oder mehrere JSON-Funktionen in unsere Abfrage einzufügen, sodass sie ein JSON-Dokument zurückgibt.

Lassen Sie uns zuerst unseren Ausgabemodus auf list setzen :

.mode list

Lassen Sie uns nun eine Abfrage ausführen, die json_group_array() verwendet und json_object() um unsere Abfrageergebnisse in einem JSON-Dokument zurückzugeben:

SELECT json_group_array( 
        json_object(
        'PetId', PetId, 
        'PetName', PetName,
        'TypeId', TypeId 
        )
    )
FROM Pets;

Ergebnis:

[{"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 geben wir jede Zeile als JSON-Objekt aus und das Ganze wird in ein JSON-Array gepackt.

Wir können json_group_array() weglassen Funktion, um jedes Objekt einzeln zurückzugeben:

SELECT json_object( 
    'PetId', PetId, 
    'PetName', PetName,
    'TypeId', TypeId 
    )
FROM Pets;

Ergebnis:

{"PetId":1,"PetName":"Homer","TypeId":3}
{"PetId":2,"PetName":"Yelp","TypeId":1}
{"PetId":3,"PetName":"Fluff","TypeId":2}
{"PetId":4,"PetName":"Brush","TypeId":4}

Bei diesen Beispielen wird davon ausgegangen, dass JSON-Funktionen aktiviert sind. Wenn Sie SQLite 3.38.0 oder höher verwenden, sollten diese standardmäßig aktiviert sein (es sei denn, sie wurden beim Kompilieren von SQLite explizit deaktiviert).

Vor SQLite-Version 3.38.0 (veröffentlicht am 22. Februar 2022) mussten wir SQLite mit dem SQLITE_ENABLE_JSON1 kompilieren Option, um die JSON-Funktionen in den Build aufzunehmen. Ab SQLite-Version 3.38.0 sind die JSON-Funktionen jedoch standardmäßig enthalten.