Analysieren und Transformieren von JSON-Daten mit OPENJSON
Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics
Die OPENJSON
Rowsetfunktion konvertiert JSON-Text in eine Reihe von Zeilen und Spalten. Nach der Transformation einer JSON-Sammlung in ein Rowset mithilfe von OPENJSON
können Sie jede beliebige SQL-Abfrage auf zurückgegebene Daten ausführen oder diese in eine Tabelle von SQL Server einfügen. Weitere Informationen zum Arbeiten mit JSON-Daten in der SQL Server-Datenbank-Engine finden Sie unter JSON-Daten in SQL Server.
Die OPENJSON
Funktion greift ein einzelnes JSON-Objekt oder eine Sammlung von JSON-Objekten auf und transformiert sie in eine oder mehrere Zeilen. Die OPENJSON
Funktion gibt standardmäßig die folgenden Daten zurück:
- Aus einem JSON-Objekt gibt die Funktion alle Schlüssel-Wert-Paare zurück, die auf der ersten Ebene gefunden werden.
- Aus einem JSON-Array gibt die Funktion alle Elemente des Arrays mit ihren Indizes zurück.
Sie können eine optionale WITH
Klausel hinzufügen, um ein Schema bereitzustellen, das die Struktur der Ausgabe definiert.
OPENJSON mit der Standardausgabe
Bei Verwendung der OPENJSON
Funktion ohne ein explizites Schema für die Ergebnisse, d.h. ohne eine WITH
Klausel nach OPENJSON
, gibt die Funktion eine Tabelle mit den folgenden drei Spalten zurück:
- Der
name
der Eigenschaft im Eingabeobjekt (oder Index des Elements im Eingabe-Array) - Der
value
der Eigenschaft oder des Arrayelements - Der
type
(z.B. Zeichenfolge, Zahl, boolescher Wert, Array oder Objekt)
OPENJSON
gibt jede Eigenschaft des JSON-Objekts oder jedes Element des Arrays als separate Zeile zurück
Das folgende Beispiel verwendet OPENJSON
mit dem Standardschema – also ohne die optionale Klausel – und gibt eine Zeile für jede Eigenschaft des JSON-Objekts zurück.
DECLARE @json NVARCHAR(MAX);
SET @json='{ "name": "John", "surname": "Doe", "age": 45, "skills": [ "SQL", "C#", "MVC" ]}';
SELECT *
FROM OPENJSON(@json);
Hier sehen Sie das Ergebnis.
Schlüssel | value | Typ |
---|---|---|
name |
John |
1 |
surname |
Doe |
1 |
age |
45 |
2 |
skills |
[ "SQL" ,"C#" ,"MVC" ] |
4 |
Weitere Informationen und Beispiele finden Sie unter Use OPENJSON with the Default Schema
Syntax und Verwendung finden Sie unter OPENJSON.
OPENJSON-Ausgabe mit einer expliziten Struktur
Wenn Sie mithilfe der WITH
Klausel der OPENJSON
Funktion ein Schema für die Ergebnisse angeben, gibt die Funktion eine Tabelle zurück, die nur die von Ihnen in der WITH
Klausel definierten Spalten enthält. In der optionalen WITH
Klausel können Sie einen Satz von Ausgabespalten, deren Typen und die Pfade der JSON-Quelleigenschaften für jeden Ausgabewert angeben. OPENJSON
durchläuft das Array von JSON-Objekten, liest Werte auf dem angegebenen Pfad für jede Spalte und konvertiert sie in einen angegebenen Typ.
Im folgenden Beispiel wird OPENJSON
mit einem Schema für die Ausgabe verwendet, das Sie explizit in der WITH
Klausel angeben.
DECLARE @json NVARCHAR(MAX);
SET @json = N'[
{
"Order": {
"Number": "SO43659",
"Date": "2024-05-31T00:00:00"
},
"AccountNumber": "AW29825",
"Item": {
"Price": 2024.9940,
"Quantity": 1
}
},
{
"Order": {
"Number": "SO43661",
"Date": "2024-06-01T00:00:00"
},
"AccountNumber": "AW73565",
"Item": {
"Price": 2024.9940,
"Quantity": 3
}
}
]';
SELECT *
FROM OPENJSON(@json) WITH (
Number VARCHAR(200) '$.Order.Number',
DATE DATETIME '$.Order.Date',
Customer VARCHAR(200) '$.AccountNumber',
Quantity INT '$.Item.Quantity'
);
Hier sehen Sie das Ergebnis.
Zahl | Date | Kunde | Menge |
---|---|---|---|
SO43659 |
2024-05-31T00:00:00 |
AW29825 |
1 |
SO43661 |
2024-06-01T00:00:00 |
AW73565 |
3 |
Diese Funktion gibt die Elemente eines JSON-Arrays zurück und formatiert diese.
Für jedes Element im JSON-Array generiert
OPENJSON
eine neue Zeile in der Ausgabetabelle. Die zwei Elemente im JSON-Array werden in zwei Zeilen in der zurückgegebenen Tabelle konvertiert.Für jede Spalte, die mithilfe der Syntax
colName type json_path
angegeben wurde, konvertiertOPENJSON
den Wert, der in jedem Arrayelement im angegebenen Pfad gefunden wurde, in den angegebenen Typ. In diesem Beispiel werden Werte aus derDate
-Spalte aus jedem Element im Pfad$.Order.Date
genommen und in datetime-Werte konvertiert.
Weitere Informationen und Beispiele finden Sie unter Use OPENJSON with an Explicit Schema (SQL Server).
Syntax und Verwendung finden Sie unter OPENJSON.
OPENJSON erfordert Kompatibilitätsgrad 130
Die OPENJSON
Funktion steht nur für den Kompatibilitätsgrad 130
oder höher zur Verfügung. Wenn der Datenbank-Kompatibilitätsgrad kleiner als 130
ist, kann SQL Server die OPENJSON
Funktion nicht finden und ausführen. Andere integrierte JSON-Funktionen sind für alle Kompatibilitätsgrade verfügbar.
Sie können die Kompatibilitätsebene in der sys.databases
Ansicht oder in Datenbankeigenschaften überprüfen und die Kompatibilitätsebene einer Datenbank mit dem folgenden Befehls ändern:
ALTER DATABASE <DatabaseName> SET COMPATIBILITY_LEVEL = 130;