Freigeben über


JSON-Pfadausdrücke im SQL-Datenbankmodul

Gilt für: SQL Server 2016 (13.x) und spätere versionen: Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (serverless SQL pool only)SQL database in Microsoft Fabric

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 Ansicht von 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 Wert 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.

Pfadmodus

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.

  • In strict Wenn der Pfadausdruck einen Fehler enthält, gibt die Funktion einen Fehler aus.

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');

Path

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". Wenn der Schlüsselname mit einem Dollarzeichen startet oder Sonderzeichen wie Leerzeichen oder Punktoperatoren enthält (.), umgeben Sie es mit Anführungszeichen.

    • 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.

Unterstützung von Array-Platzhaltern und Bereichen

Note

Array-Wildcard- und Bereichsunterstützung befindet sich derzeit in der Vorschauphase und ist nur in SQL Server 2025 (17.x) verfügbar.

SQL Server 2025 (17.x) 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:

Path Description
$[*] Alle Elemente
$[0] Erstes Element
$[0 to 2] Erste drei Elemente
$[last] Letztes Element
$[last, 0] Invalid
$[last, 2, 0, last] Invalid
$.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.

Examples

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 Value
$.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

Eine visuelle Einführung in die integrierte JSON-Unterstützung finden Sie im folgenden Video: