Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (endast serverlös SQL-pool)
SQL-databas i Förhandsversion av Microsoft Fabric
Använd JSON-sökvägsuttryck för att referera till egenskaperna för JSON-objekt.
Du måste ange ett sökvägsuttryck när du anropar följande funktioner.
- När du anropar OPENJSON för att skapa en relationsvy över JSON-data.
- När du anropar JSON_VALUE för att extrahera ett värde från JSON-text.
- När du anropar JSON_QUERY för att extrahera ett JSON-objekt eller en matris.
- När du anropar JSON_MODIFY för att uppdatera värdet för en egenskap i en JSON-sträng.
Delar av ett sökvägsuttryck
Ett sökvägsuttryck har två komponenter.
Det valfria sökvägsläget med värdet
laxellerstrict.Själva sökvägen .
Path mode
I början av sökvägsuttrycket kan du deklarera sökvägsläget genom att ange nyckelordet lax eller strict. Standardvärdet är lax.
I
laxläget returnerar funktionen tomma värden om sökvägsuttrycket innehåller ett fel. Om du till exempel begär värdet$.name, och JSON-texten inte innehåller ennamenyckel, returnerar funktionen null, men genererar inget fel.I
strictläge genererar funktionen ett fel om sökvägsuttrycket innehåller ett fel.
Följande fråga anger lax uttryckligen läget i sökvägsuttrycket.
DECLARE @json AS NVARCHAR (MAX);
SET @json = N'{ ... }';
SELECT *
FROM OPENJSON (@json, N'lax $.info');
Path
Efter den valfria sökvägslägesdeklarationen anger du själva sökvägen.
Dollartecknet (
$) representerar kontextobjektet.Egenskapsstigen är en serie steg längs stigen. Sökvägssteg kan innehålla följande element och operatorer.
Key names. Till exempel
$.nameoch$."first name". Om nyckelnamnet börjar med ett dollartecken eller innehåller specialtecken som blanksteg eller punktoperatorer(.) ska det omgivas med citattecken.Array elements. Till exempel
$.product[3]. Matriser är nollbaserade.Punktoperatorn (
.) anger en medlem i ett objekt. I$.people[1].surnameärsurnameett barn tillpeople.Matrisens jokertecken och intervallsökningar stöds också om indata är ett JSON-typvärde.
Stöd för jokertecken och intervall för array
Note
Stöd för jokertecken och intervall för matriser är för närvarande i förhandsversion och är endast tillgängligt i förhandsversionen av SQL Server 2025 (17.x).
SQL Server 2025 (17.x) Preview expanderar sökvägsuttrycket ANSI SQL/JSON för att stödja en matris med jokertecken. Med jokertecknet Matris kan du ange alla element, elementintervall, en lista över element eller specialtoken "last" för att ange det sista värdet i en JSON-matris. SQL/JSON-matriser använder nollbaserat index. SQL/JSON-sökväg med jokertecken kan användas i JSON_QUERY, JSON_PATH_EXISTS och JSON_CONTAINS.
Funktionen JSON_VALUE stöder sökvägsuttrycket SQL/JSON, men returvärdet för en JSON_VALUE funktion är en SQL-skalär och därför returneras NULL alltid funktionen för alla SQL/JSON-sökvägar som pekar på ett JSON-objekt eller en matris. Endast wildcard-tecken för array stöds om indata är av typen json.
Följande syntax visar hur jokertecken, intervall och specialtoken last kan användas:
path[elements ]
elements ::= {
*
| number
| number to number
| last
| {number...[, number] }
}
Den speciella token last kan användas i stället för talvärde. Om ett intervall anges måste intervallet anges i ökande ordning.
Exempel på några giltiga SQL/JSON-sökvägsuttryck:
| Path | Description |
|---|---|
$[*] |
All elements |
$[0] |
First element |
$[0 to 2] |
De tre första elementen |
$[last] |
Last element |
$[last, 0] |
Invalid |
$[last, 2, 0, last] |
Invalid |
$.creditcards[0].type |
Returnerar typegenskapsvärdet för det första elementet i creditcards matrisen |
$.credit_cards[*].type |
Returnerar typegenskapsvärdet för alla element i creditcards matrisen |
$.credit_cards[0, 2].type |
Returnerar typegenskapsvärdet för det första och tredje elementet i creditcards matrisen |
$.credit_cards[1 to 3].type |
Returnerar typegenskapsvärdet för det andra till fjärde elementet i creditcards matrisen |
$.credit_cards[last].type |
Returnerar typegenskapsvärdet för det sista elementet i creditcards matrisen |
$.credit_cards[last, 0].type |
Returnerar typegenskapsvärdet för det sista och första elementet i creditcards matrisen |
Examples
Exemplen i det här avsnittet refererar till följande JSON-text.
{
"people": [{
"name": "John",
"surname": "Doe"
}, {
"name": "Jane",
"surname": null,
"active": true
}]
}
I följande tabell visas några exempel på sökvägsuttryck.
| 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"] |
Så här hanterar inbyggda funktioner duplicerade sökvägar
Om JSON-texten innehåller dubblettegenskaper – till exempel två nycklar med samma namn på samma nivå – returnerar funktionerna JSON_VALUE och JSON_QUERY endast det första värdet som matchar sökvägen. Om du vill parsa ett JSON-objekt som innehåller dubblettnycklar och returnera alla värden använder du OPENJSON, som du ser i följande exempel.
DECLARE @json AS NVARCHAR (MAX);
SET @json = N'{"person":{"info":{"name":"John", "name":"Jack"}}}';
SELECT value
FROM OPENJSON (@json, '$.person.info');
Läs mer om JSON
En visuell introduktion till det inbyggda JSON-stödet finns i följande video: