Formatieren von Abfrageergebnissen als JSON mit FOR JSON

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics (nur serverloser SQL-Pool)

Formatieren Sie Abfrageergebnisse als JSON, oder exportieren Sie Daten aus SQL Server als JSON, indem Sie einer SELECT-Anweisung die FOR JSON-Klausel hinzufügen. Verwenden Sie die FOR JSON Klausel, um Clientanwendungen zu vereinfachen, indem Sie die Formatierung der JSON-Ausgabe von der App an SQL Server delegieren.

Hinweis

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

Formatieren von Abfrageergebnissen

Wenn Sie die FOR JSON Klausel verwenden, können Sie die Struktur der JSON-Ausgabe explizit angeben oder die Struktur der SELECT Anweisung bestimmen lassen.

  • 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 SELECT Anweisung zu formatieren, verwenden Sie FOR JSON AUTO.

Hier ist ein Beispiel für eine SELECT Anweisung mit der FOR JSON Klausel und deren Ausgabe.

Diagram showing how FOR JSON works.

Steuern der Ausgabe mit FOR JSON PATH

Im PATH Modus können Sie die Punktsyntax ( z. B. ) verwenden, Item.Price um geschachtelte Ausgabe zu formatieren.

Hier ist eine Beispielabfrage, die den Modus mit der FOR JSON Klausel verwendetPATH. Im folgenden Beispiel wird auch die ROOT Option zum Angeben eines benannten Stammelements verwendet.

Diagram of flow of FOR JSON output.

Weitere Informationen zu FOR JSON PATH

Ausführlichere Informationen und Beispiele finden Sie unter "Format Nested JSON Output with PATH Mode (SQL Server)".

Informationen zur Syntax und Verwendung finden Sie unter FOR-Klausel (Transact-SQL).For syntax and usage, see FOR Clause (Transact-SQL).

Steuern der Ausgabe anderer JSON-Ausgabeoptionen

Steuern Sie die Ausgabe der FOR JSON Klausel mithilfe der folgenden zusätzlichen Optionen.

  • ROOT

    Wenn Sie der JSON-Ausgabe ein einzelnes Element auf oberster Ebene hinzufügen möchten, geben Sie die ROOT Option an. 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 (SQL Server).

  • INCLUDE_NULL_VALUES

    Um Nullwerte in die JSON-Ausgabe einzuschließen, geben Sie die INCLUDE_NULL_VALUES Option an. Wenn Sie diese Option nicht angeben, enthält die Ausgabe keine JSON-Eigenschaften für NULL Werte in den Abfrageergebnissen. Weitere Informationen finden Sie unter Include Null Values in JSON – INCLUDE_NULL_VALUES Option.

  • WITHOUT_ARRAY_WRAPPER

    Wenn Sie die eckigen Klammern entfernen möchten, die die JSON-Ausgabe der FOR JSON Klausel standardmäßig umgeben, geben Sie die WITHOUT_ARRAY_WRAPPER Option an. Verwenden Sie diese Option, um ein einzelnes JSON-Objekt als Ausgabe eines einzeiligen Ergebnisses zu generieren. Wenn Sie diese Option nicht angeben, wird die JSON-Ausgabe als Array formatiert , d. h. die Ausgabe wird in eckige Klammern eingeschlossen. Weitere Informationen finden Sie unter Entfernen eckiger Klammern aus JSON – WITHOUT_ARRAY_WRAPPER Option.

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 Clientanwendungen erfordern möglicherweise Code, um langwierige Ergebnisse in eine einzelne gültige JSON-Zeichenfolge zu integrieren, indem der Inhalt mehrerer Zeilen verkettet wird. 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 of FOR JSON output 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 How FOR JSON escapes special characters and control characters (SQL Server).

Beispiel

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 J
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"
}]