JSON-Pfadausdrücke (SQL Server)
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)
Verwenden Sie JSON-Pfadausdrücke, um auf die Eigenschaften der JSON-Objekte zu verweisen.
Sie müssen einen Pfadausdruck angeben, wenn Sie die folgenden Funktionen aufrufen.
Wenn Sie OPENJSON aufrufen, um eine relationale Sicht der JSON-Daten zu erstellen. Weitere Informationen finden Sie unter OPENJSON (Transact-SQL).
Wenn Sie JSON_VALUE aufrufen, um einen Wert aus JSON-Text zu extrahieren. Weitere Informationen finden Sie unter JSON_VALUE (Transact-SQL).
Wenn Sie JSON_QUERY aufrufen, um ein JSON-Objekt oder ein -Array zu extrahieren. Weitere Informationen finden Sie unter JSON_QUERY (Transact-SQL).
Wenn Sie JSON_MODIFY aufrufen, um den Werte einer Eigenschaft in einer JSON-Zeichenfolge zu aktualisieren. Weitere Informationen finden Sie unter JSON_MODIFY (Transact-SQL).
Teile eines Pfadausdrucks
Ein Pfadausdruck hat zwei Komponenten.
Der optionale PATH-Modus mit einem Wert von lax oder strict.
Der Pfad selbst.
PATH-Modus
Am Anfang des Pfadausdrucks können Sie optional den „path mode“ deklarieren, indem Sie das Schlüsselwort lax oder strictangeben. Der Standardwert ist lax.
Im Modus lax gibt die Funktion leere Werte zurück, falls der Pfadausdruck einen Fehler enthält. Falls Sie beispielsweise den Wert $.name anfordern und der JSON-Text keinen name-Schlüssel enthält, gibt die Funktion NULL zurück, löst jedoch keinen Fehler aus.
Im Modus strict löst die Funktion einen Fehler aus, wenn der Pfadausdruck einen Fehler enthält.
Die folgende Abfrage gibt explizit den Modus lax
im Pfadausdruck an.
DECLARE @json NVARCHAR(MAX);
SET @json=N'{ ... }';
SELECT * FROM OPENJSON(@json, N'lax $.info');
Pfad
Nach der optionalen Deklaration des „path mode“ geben Sie den Pfad selbst an.
Das Dollarzeichen (
$
) stellt das Kontextelement dar.Der Eigenschaftspfad ist ein Satz an Pfadschritten. Pfadschritte können die folgenden Elemente und Operatoren enthalten.
Schlüsselnamen. Beispiel:
$.name
und$."first name"
. Umschließen Sie den Namen des Schlüssels mit Anführungszeichen, falls er mit einem Dollarzeichen beginnt, oder Sonderzeichen wie z. B. Leerzeichen oder Punkt-Operatoren (.
) enthält.Array-Elemente. Beispiel:
$.product[3]
. Arrays sind nullbasiert.Der Punktoperator (
.
) zeigt einen Objektmember an. Beispielsweise istsurname
in$.people[1].surname
ein untergeordnetes Element vonpeople
.
Beispiele
Die Beispiele in diesem Abschnitt verweisen auf den folgenden JSON-Text.
{
"people": [{
"name": "John",
"surname": "Doe"
}, {
"name": "Jane",
"surname": null,
"active": true
}]
}
Die folgende Tabelle zeigt einige Beispiele für Pfadausdrücke.
Pfadausdruck | Wert |
---|---|
$.people[0].name | John |
$.people[1] | { "name": "Jane", "surname": null, "active": true } |
$.people[1].surname | NULL |
$ | { „people“: [ { „name“: „John“, „surname“: „Doe“ }, { „name“: „Jane“, „surname“: null, „active“: true } ] } |
Wie integrierte Funktionen doppelte Pfade behandeln
Falls der JSON-Text doppelte Eigenschaften enthält – beispielsweise zwei Schlüssel mit dem gleichen Namen auf der gleichen Stufe –, geben die Funktionen JSON_VALUE und JSON_QUERY nur den ersten Wert zurück, der dem Pfad entspricht. Verwenden Sie OPENJSON, wie im folgenden Beispiel gezeigt, um ein JSON-Objekt zu analysieren, das doppelte Schlüssel enthält, und um alle Werte zurückzugeben.
DECLARE @json NVARCHAR(MAX);
SET @json=N'{"person":{"info":{"name":"John", "name":"Jack"}}}';
SELECT value
FROM OPENJSON(@json,'$.person.info');
Weitere Informationen zu JSON in SQL Server und Azure SQL-Datenbank
Microsoft-Videos
Hinweis
Einige der Videolinks in diesem Abschnitt funktionieren derzeit möglicherweise nicht. Microsoft migriert Inhalte, die zuvor auf Channel 9 veröffentlicht wurden, zu einer neuen Plattform. Wir aktualisieren die Links, wenn die Videos zur neuen Plattform migriert werden.
Eine visuelle Einführung in die JSON-Unterstützung, die in SQL Server und Azure SQL-Datenbank integriert ist, finden Sie in den folgenden Videos:
Weitere Informationen
OPENJSON (Transact-SQL)
JSON_VALUE (Transact-SQL)
JSON_QUERY (Transact-SQL)