Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
- Wenn Sie JSON_VALUE aufrufen, um einen Wert aus JSON-Text zu extrahieren.
- Wenn Sie JSON_QUERY aufrufen, um ein JSON-Objekt oder ein -Array zu extrahieren.
- Wenn Sie JSON_MODIFY aufrufen, um den Werte einer Eigenschaft in einer JSON-Zeichenfolge zu aktualisieren.
Teile eines Pfadausdrucks
Ein Pfadausdruck hat zwei Komponenten.
PATH-Modus
Deklarieren Sie am Anfang des Pfadausdrucks optional den Pfadmodus, indem Sie das Schlüsselwort lax
oder strict
angeben. Der Standardwert lautet lax
.
Im
lax
Modus gibt die Funktion leere Werte zurück, wenn der Pfadausdruck einen Fehler enthält. Wenn Sie z. B. den Wert$.name
anfordern und der JSON-Text keinen Schlüssel enthältname
, gibt die Funktion NULL zurück, löst jedoch keinen Fehler aus.Im
strict
-Modus 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 AS 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 ist$.people[1].surname
insurname
ein untergeordnetes Element vonpeople
.Array-Wildcard- und Bereichssuchen werden auch unterstützt, wenn die Eingabe ein JSON-Typwert ist.
Array-Wildcard- und Bereichsunterstützung
Hinweis
Array-Wildcard- und Bereichsunterstützung befindet sich derzeit in der Vorschauversion und ist nur in der SQL Server 2025 (17.x) Vorschauversion verfügbar.
SQL Server 2025 (17.x) Preview erweitert DEN ANSI SQL/JSON-Pfadausdruck, um einen Array-Wildcard zu unterstützen. Mit dem Array-Wildcard können Sie alle Elemente, einen Bereich von Elementen, eine Liste von Elementen oder das spezielle Token "last" angeben, um den letzten Wert in einem JSON-Array anzugeben. SQL/JSON-Arrays verwenden nullbasierten Index. SQL/JSON-Pfad mit Wildcards kann in JSON_QUERY, JSON_PATH_EXISTS und JSON_CONTAINS verwendet werden.
Während JSON_VALUE
die Funktion den SQL/JSON-Pfadausdruck unterstützt, ist der Rückgabewert einer JSON_VALUE
Funktion ein SQL-Skalar und daher gibt die Funktion immer für jeden SQL/JSON-Pfad zurück NULL
, der auf ein JSON-Objekt oder -Array verweist. Array-Wildcards werden nur unterstützt, wenn die Eingabe ein JSON-Typ ist.
Die folgende Syntax zeigt, wie das Wildcard-, Bereichs- und Spezialtoken last
verwendet werden kann:
path[elements ]
elements ::= {
*
| number
| number to number
| last
| {number...[, number] }
}
Das spezielle Token last
kann anstelle des Zahlenwerts verwendet werden. Wenn ein Bereich angegeben ist, muss der Bereich in erhöhter Reihenfolge angegeben werden.
Beispiele für gültige SQL/JSON-Pfadausdrücke:
Pfad | BESCHREIBUNG |
---|---|
$[*] |
Alle Elemente |
$[0] |
Erstes Element |
$[0 to 2] |
Erste drei Elemente |
$[last] |
Letztes Element |
$[last, 0] |
Ungültig |
$[last, 2, 0, last] |
Ungültig |
$.creditcards[0].type |
Gibt den Typeigenschaftswert des ersten Elements im creditcards Array zurück. |
$.credit_cards[*].type |
Gibt den Typeigenschaftswert aller Elemente im creditcards Array zurück. |
$.credit_cards[0, 2].type |
Gibt den Typeigenschaftswert des ersten und dritten Elements im creditcards Array zurück. |
$.credit_cards[1 to 3].type |
Gibt den Typeigenschaftswert des zweiten bis vierten Elements im creditcards Array zurück. |
$.credit_cards[last].type |
Gibt den Typeigenschaftswert des letzten Elements im creditcards Array zurück. |
$.credit_cards[last, 0].type |
Gibt den Typeigenschaftswert des letzten und ersten Elements im creditcards Array zurück. |
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 } ] } |
$.people[last].name |
["Jane"] |
$.people[0 to 1].name |
["John","Jane"] |
$.people[0, 1].name |
["John","Jane"] |
Wie integrierte Funktionen doppelte Pfade behandeln
Wenn der JSON-Text doppelte Eigenschaften enthält – z. B. zwei Schlüssel mit demselben Namen auf derselben Ebene – geben die JSON_VALUE
funktionen JSON_QUERY
nur den ersten Wert zurück, der dem Pfad entspricht. Verwenden Sie OPENJSON
zum Analysieren eines JSON-Objekts, das doppelte Schlüssel enthält und alle Werte zurückgibt, wie im folgenden Beispiel gezeigt.
DECLARE @json AS 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
Eine visuelle Einführung in die integrierte JSON-Unterstützung in SQL Server- und Azure SQL-Datenbank finden Sie im folgenden Video: