Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2016 (13.x) en latere versies
Azure SQL Database
Azure SQL Managed Instance
Azure 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.
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
laxde modus retourneert de functie lege waarden als de padexpressie een fout bevat. Als u bijvoorbeeld de waarde$.nameaanvraagt en de JSON-tekst geen sleutel bevatname, retourneert de functie null, maar treedt er geen fout op.In
strictde 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
$.nameen$."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].surnameissurnameeen kind vanpeople.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: