Formatieren von Abfrageergebnissen als JSON mit FOR JSON

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-Datenbank Azure SQL Managed Instance 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 zu SQL Server delegieren.

Hinweis

Azure Data Studio ist der empfohlene Abfrage-Editor für JSON-Abfragen, da hierbei die JSON-Ergebnisse, wie in diesem Artikel gezeigt, automatisch formatiert werden. SQL Server Management Studio zeigt eine unformatierte Zeichenkette 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 die Ausgabe 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.

  • Verwenden Sie FOR JSON AUTO, um die JSON-Ausgabe basierend auf der Struktur der SELECT-Anweisung automatisch zu formatieren.

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

Diagramm, das die Funktionsweise von FOR JSON zeigt.

Steuern der Ausgabe mit FOR JSON PATH

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

Hier ist eine Beispielabfrage, die den PATH-Modus mit der FOR JSON-Klausel verwendet. Im folgenden Beispiel wird auch die Option ROOT verwendet, um ein benanntes Stammelement anzugeben.

Flussdiagramm für FOR JSON-Ausgabe.

Weitere Informationen zu FOR JSON PATH

Weitere detaillierte Informationen und Beispiele finden Sie unter Formatieren einer geschachtelten JSON-Ausgabe im PATH-Modus (SQL Server).

Weitere Informationen zu Syntax und Verwendung finden Sie unter FOR-Klausel (Transact-SQL).

Steuern der Ausgabe anderer JSON-Ausgabeoptionen

Steuern Sie die Ausgabe der FOR JSON-Klausel, indem Sie die folgenden Zusatzoptionen verwenden.

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.

      • Möglicherweise erfordern andere Clientanwendungen Code, um längere Ergebnislisten neu zu einer einzelnen gültigen JSON-Zeichenfolge zu kombinieren, indem die Inhalte mehrerer Zeilen verkettet werden. 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 How FOR JSON escapes special characters and control characters (SQL Server); (So maskiert FOR JSON Sonderzeichen und Steuerzeichen (SQL Server)).

Beispiel

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

Abfrageergebnisse

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