JSON-Pfadausdrücke (SQL Server)

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

  1. Der optionale PATH-Modus mit einem Wert von lax oder strict.

  2. 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". Wenn der Schlüsselname mit einem Dollarzeichen beginnt oder Sonderzeichen wie Leerzeichen oder Punktoperatoren(.) enthält, setzen Sie ihn in Anführungszeichen ein.

    • Array-Elemente. Beispielsweise $.product[3]. Arrays sind nullbasiert.

    • Der Punktoperator (.) zeigt einen Objektmember an. Beispielsweise ist surname in $.people[1].surname ein untergeordnetes Element von people.

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)