Delen via


JSON-padexpressies in de SQL-database-engine

Van toepassing op: SQL Server 2016 (13.x) en latere versies Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (alleen serverloze SQL-pool)SQL-database in Microsoft Fabric Preview

Gebruik JSON-padexpressies om te verwijzen naar de eigenschappen van JSON-objecten.

U moet een padexpressie opgeven wanneer u de volgende functies aanroept.

  • Wanneer u OPENJSON aanroept om een relationele weergave van JSON-gegevens te maken.
  • Wanneer u JSON_VALUE aanroept om een waarde uit JSON-tekst te extraheren.
  • Wanneer u JSON_QUERY aanroept om een JSON-object of een matrix te extraheren.
  • Wanneer u JSON_MODIFY aanroept om de waarde van een eigenschap in een JSON-tekenreeks bij te werken.

Delen van een padexpressie

Een padexpressie heeft twee onderdelen.

  1. De optionele padmodus, met een waarde van lax of strict.

  2. Het pad zelf.

Path mode

Aan het begin van de padexpressie kunt u desgewenst de padmodus declareren door het trefwoord lax of strict. De standaardwaarde is lax.

  • In lax de modus retourneert de functie lege waarden als de padexpressie een fout bevat. Als u bijvoorbeeld de waarde $.nameaanvraagt en de JSON-tekst geen sleutel bevat name , retourneert de functie null, maar treedt er geen fout op.

  • In strict de modus genereert de functie een fout als de padexpressie een fout bevat.

De volgende query specificeert de modus expliciet in de padexpressie lax.

DECLARE @json AS NVARCHAR (MAX);

SET @json = N'{ ... }';

SELECT *
FROM OPENJSON (@json, N'lax $.info');

Path

Geef na de optionele declaratie van de padmodus het pad zelf op.

  • Het dollarteken ($) vertegenwoordigt het contextitem.

  • Het eigenschapspad is een reeks van padstappen. Padstappen kunnen de volgende elementen en operatoren bevatten.

    • Key names. Bijvoorbeeld $.name en $."first name". Als de sleutelnaam begint met een dollarteken of speciale tekens bevat, zoals spaties of puntoperators(.), plaatst u deze tussen aanhalingstekens.

    • Array elements. Bijvoorbeeld: $.product[3]. Matrices zijn gebaseerd op nul.

    • De puntoperator (.) geeft een lid van een object aan. Bijvoorbeeld, in $.people[1].surname is surname een kind van people.

    • Zoekopdrachten met jokertekens en bereikzoekopdrachten worden ook ondersteund als de invoer een JSON-type waarde is.

Ondersteuning voor matrix-jokertekens en -bereiken

Note

Ondersteuning voor matrix-jokertekens en -bereiken is momenteel beschikbaar in preview en is alleen beschikbaar in SQL Server 2025 (17.x) Preview.

Sql Server 2025 (17.x) Preview breidt ANSI SQL/JSON-padexpressie uit ter ondersteuning van een matrix-jokerteken. Met het jokerteken Matrix kunt u alle elementen, het bereik van elementen, de lijst met elementen of het speciale token 'laatste' opgeven om de laatste waarde in een JSON-matrix aan te geven. SQL/JSON-matrices maken gebruik van op nul gebaseerde index. SQL/JSON-pad met jokertekens kan worden gebruikt in JSON_QUERY, JSON_PATH_EXISTS en JSON_CONTAINS.

Hoewel JSON_VALUE de functie de SQL/JSON-padexpressie ondersteunt, is de retourwaarde van een JSON_VALUE functie een SQL-scalaire waarde. De functie retourneert NULL daarom altijd voor elk SQL/JSON-pad dat verwijst naar een JSON-object of -matrix. Matrix-jokertekens worden alleen ondersteund als de invoer een json-type is.

De volgende syntaxis laat zien hoe het jokerteken, het bereik en het speciale token last kunnen worden gebruikt:

path[elements ]

elements ::= {
*
| number
| number to number
| last
| {number...[, number] }
}

Het speciale token last kan worden gebruikt in plaats van getalwaarde. Als er een bereik is opgegeven, moet het bereik in toenemende volgorde worden opgegeven.

Voorbeelden van geldige SQL/JSON-padexpressies:

Path Description
$[*] All elements
$[0] First element
$[0 to 2] Eerste drie elementen
$[last] Last element
$[last, 0] Invalid
$[last, 2, 0, last] Invalid
$.creditcards[0].type Retourneert de eigenschapswaarde van het type van het eerste element in creditcards de matrix
$.credit_cards[*].type Retourneert de eigenschapswaarde van het type van alle elementen in creditcards matrix
$.credit_cards[0, 2].type Geeft als resultaat de eigenschapswaarde van het eerste en derde element in creditcards de matrix
$.credit_cards[1 to 3].type Geeft de type-eigendomswaarde van het tweede tot en met het vierde element in de creditcards array terug.
$.credit_cards[last].type Geeft de waarde van de type-eigenschap van het laatste element in de creditcards-array terug.
$.credit_cards[last, 0].type Geeft de type-eigenschapswaarde van het laatste en het eerste element in de creditcards-array terug

Examples

In de voorbeelden in deze sectie wordt verwezen naar de volgende JSON-tekst.

{
    "people": [{
        "name": "John",
        "surname": "Doe"
    }, {
        "name": "Jane",
        "surname": null,
        "active": true
    }]
}

In de volgende tabel ziet u enkele voorbeelden van padexpressies.

Path expression 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"]

Hoe ingebouwde functies dubbele paden verwerken

Als de JSON-tekst dubbele eigenschappen bevat, bijvoorbeeld twee sleutels met dezelfde naam op hetzelfde niveau, retourneren de JSON_VALUE functies JSON_QUERY alleen de eerste waarde die overeenkomt met het pad. Als u een JSON-object met dubbele sleutels wilt parseren en alle waarden wilt retourneren, gebruikt OPENJSONu , zoals wordt weergegeven in het volgende voorbeeld.

DECLARE @json AS NVARCHAR (MAX);

SET @json = N'{"person":{"info":{"name":"John", "name":"Jack"}}}';

SELECT value
FROM OPENJSON (@json, '$.person.info');

Meer informatie over JSON

Zie de volgende video voor een visuele inleiding tot de ingebouwde JSON-ondersteuning: