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 SieFOR JSON AUTO
.
Hier ist 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 ( 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.
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ürNULL
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 dieWITHOUT_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:
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).
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).
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"
}]
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-Klausel (Transact-SQL)
- Verwenden der FOR JSON-Ausgabe in SQL Server und in Client-Apps (SQL Server)
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für