Freigeben über


Abfrageergebnisse als JSON mit FOR JSON formatieren

Gilt für: SQL Server 2016 (13.x) und höhere Versionen Azure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse Analytics (nur serverlosen SQL-Pool)SQL-Analyseendpunkt in Microsoft FabricWarehouse in Microsoft FabricSQL-Datenbank in Microsoft Fabric

Formatieren Sie Abfrageergebnisse als JSON, oder exportieren Sie Daten aus SQL Server als JSON, indem Sie einer FOR JSON-Anweisung die SELECT-Klausel hinzufügen. Verwenden Sie die FOR JSON Sie können eine Klausel zur Vereinfachung von Client-Anwendungen festlegen, indem Sie die Formatierung der JSON-Ausgabe der Anwendung an SQL-Server delegieren.

Note

Azure Daten-Studio ist der empfohlene Abfrage-Editor für JSON-Abfragen, da er die JSON-Ergebnisse automatisch formatiert, wie in diesem Artikel gezeigt. SQL-Server Management Studio zeigt eine unformatierte Zeichenfolge an.

In Fabric Data Warehouse, FOR JSON muss der letzte Operator in der Abfrage sein und ist daher innerhalb von Unterabfragen nicht zulässig.

Formatieren von Abfrageergebnissen

Wenn Sie die FOR JSON Klausel können Sie die Struktur der JSON-Ausgabe explizit angeben oder die Struktur der SELECT Anweisung determine the output.

  • Verwenden Sie FOR JSON PATH, um die vollständige Kontrolle über das Format der JSON-Ausgabe zu behalten. Sie können Wrapper-Objekte erstellen und komplexe Eigenschaften schachteln.

  • Um die JSON-Ausgabe automatisch basierend auf der Struktur der Datei zu formatieren. SELECT Anweisung, verwenden FOR JSON AUTO.

Hier finden Sie ein Beispiel für eine SELECT-Anweisung mit der FOR JSON-Klausel und der zugehörigen Ausgabe.

Diagramm, das zeigt, wie FOR JSON funktioniert.

Kontrollieren Sie die Ausgabe mit FÜR JSON PATH

In PATH Modus können Sie die Punktsyntax verwenden - zum Beispiel, Item.Price - um verschachtelte Ausgaben zu formatieren.

Hier ist eine Beispielabfrage, die Folgendes verwendet PATH Modus mit dem FOR JSON Klausel. Das folgende Beispiel verwendet ebenfalls den ROOT Option, um ein benanntes Root-Element anzugeben.

Diagramm des Flusses der FOR JSON-Ausgabe.

Weitere Informationen zu FOR JSON PATH

Ausführlichere Informationen und Beispiele finden Sie unter Format Nested JSON Output with PATH Mode.

Für Syntax und Verwendung, siehe SELECT - FOR-Klausel (Transact-SQL).

Steuern der Ausgabe anderer JSON-Ausgabeoptionen

Kontrollieren Sie die Ausgabe des FOR JSON Klausel unter Verwendung der folgenden zusätzlichen Optionen.

  • ROOT

    Um der JSON-Ausgabe ein einzelnes Element der obersten Ebene hinzuzufügen, geben Sie die ROOT option. Wenn Sie diese Option nicht angeben, besitzt die JSON-Ausgabe kein Stammelement. Weitere Informationen finden Sie unter Hinzufügen eines Stammknotens zur JSON-Ausgabe mit der ROOT-Option.

  • INCLUDE_NULL_VALUES

    Um Nullwerte in die JSON-Ausgabe einzuschließen, geben Sie die INCLUDE_NULL_VALUES option. Wenn Sie diese Option nicht angeben, enthält die Ausgabe keine JSON-Eigenschaften für NULL Werte in die Abfrageergebnisse ein. Für weitere Informationen, siehe Einschließen von Nullwerten in JSON - Option INCLUDE_NULL_VALUES.

  • WITHOUT_ARRAY_WRAPPER

    Um die eckigen Klammern zu entfernen, die die JSON-Ausgabe der FOR JSON Klausel standardmäßig festlegen, geben Sie die WITHOUT_ARRAY_WRAPPER option. Verwenden Sie diese Option, um ein einzelnes JSON-Objekt als Ausgabe eines einzeiligen Ergebnisses zu generieren. If Sie don't specify this option, the JSON output is formatted as an array - that is, the output is enclosed within square brackets. Für weitere Informationen, siehe Entfernen von eckigen Klammern aus JSON - Option WITHOUT_ARRAY_WRAPPER.

Ausgabe der FOR JSON-Klausel

Die Ausgabe der FOR JSON-Klausel besitzt die folgenden Eigenschaften:

  1. Das Resultset enthält eine einzelne Spalte.

    • Ein kleines Resultset kann eine einzelne Zeile enthalten.
    • Ein großes Resultset teilt den langen JSON-String über mehrere Zeilen auf.
      • Standardmäßig verkettet SQL Server Management Studio (SSMS) die Ergebnisse in einer einzelnen Zeile, wenn die Ausgabeeinstellung Results to Grid (Ergebnisse im Raster) ist. Die SSMS-Statusleiste zeigt die tatsächliche Zeilenanzahl an.

      • Andere client applications might require code bis recombine lengthy results into a single, valid JSON Zeichenkette by concatenating the contents of multiple rows. Ein Beispiel für diesen Code in einer C#-Anwendung finden Sie unter Use FOR JSON output in a C# client app (Verwenden der FOR JSON-Ausgabe in einer C#-Client-App).

        Screenshot der FOR JSON-Ausgabe in SQL-Server Management Studio.

  2. Die Ergebnisse werden wie ein JSON-Objekt-Array formatiert.

    • Die Anzahl der Elemente im JSON-Array entspricht der Anzahl der Zeilen in den Ergebnissen der SELECT-Anweisung (bevor die FOR JSON-Klausel angewendet wird).

    • Jede Zeile in den Ergebnissen der SELECT-Anweisung (bevor die FOR JSON-Klausel angewendet wird) wird ein separates JSON-Objekt im Array.

    • Jede Spalte in den Ergebnissen der SELECT-Anweisung (bevor die FOR JSON-Klausel angewendet wird) wird zu einer Eigenschaft des JSON-Objekts.

  3. Sowohl die Namen der Spalten als auch deren Werte werden entsprechend der JSON-Syntax geschützt. Weitere Informationen finden Sie unter Wie FOR JSON Sonderzeichen und Steuerzeichen maskiert.

Example

In diesem Beispiel wird veranschaulicht, wie die FOR JSON-Klausel die JSON-Ausgabe formatiert.

Abfrageergebnisse

A B C D
10 11 12 X
20 21 22 Y
30 31 32 Z

JSON-Ausgabe

[{
    "A": 10,
    "B": 11,
    "C": 12,
    "D": "X"
}, {
    "A": 20,
    "B": 21,
    "C": 22,
    "D": "Y"
}, {
    "A": 30,
    "B": 31,
    "C": 32,
    "D": "Z"
}]