Freigeben über


JSON-Pfadausdrücke (SQL Server)

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-DatenbankAzure SQL Managed InstanceAzure 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.

  1. Der optionale Pfadmodus mit einem Wert von lax oder strict.

  2. Der Pfad selbst.

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 $.nameanfordern und der JSON-Text keinen Schlüssel enthält name , 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 in surname ein untergeordnetes Element von people.

    • 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 OPENJSONzum 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: