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 derSELECT
-Anweisung automatisch zu formatieren.
Hier finden Sie ein Beispiel für eine SELECT
-Anweisung mit der FOR JSON
-Klausel und deren Ausgabe.
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.
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.
ROOT
Geben Sie die Option
ROOT
an, um der JSON-Ausgabe ein einzelnes Element der obersten Ebene hinzuzufügen. Wenn Sie diese Option nicht angeben, besitzt die JSON-Ausgabe kein Stammelement. Weitere Informationen finden Sie unter Hinzufügen eines Stammknotens zur JSON-Ausgabe mithilfe der ROOT-Option (SQL Server).INCLUDE_NULL_VALUES
Geben Sie die Option
INCLUDE_NULL_VALUES
an, um NULL-Werte in die JSON-Ausgabe einzuschließen. Wenn Sie diese Option nicht angeben, enthält die Ausgabe in den Abfrageergebnissen keine JSON-Eigenschaften fürNULL
-Werte. Weitere Informationen finden Sie unter Einschließen von NULL-Werten in die JSON-Ausgabe mit der Option INCLUDE_NULL_VALUES.WITHOUT_ARRAY_WRAPPER
Geben Sie die Option
WITHOUT_ARRAY_WRAPPER
an, um die rechteckigen Klammern zu entfernen, die die JSON-Ausgabe derFOR JSON
-Klausel umgeben. 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, dessen Ausgabe in eckige Klammern eingeschlossen ist. Weitere Informationen finden Sie unter Entfernen von rechteckigen Klammern von JSON – Option WITHOUT_ARRAY_WRAPPER.
Ausgabe der FOR JSON-Klausel
Die Ausgabe der FOR JSON
-Klausel besitzt die folgenden Eigenschaften:
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).
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.
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"
}]
Zugehöriger Inhalt
- So konvertiert FOR JSON SQL Server-Datentypen in JSON-Datentypen (SQL Server)
- Schutz von Sonderzeichen und Steuerzeichen durch FOR JSON (SQL Server)
- JSON as a bridge between NoSQL and relational worlds
- SELECT – FOR Clause (Transact-SQL)
- Verwenden der FOR JSON-Ausgabe in SQL Server und in Client-Apps (SQL Server)