Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2016 (13.x) a novější verze
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (pouze bezserverový fond SQL)
Databáze SQL v Microsoft Fabric
Pomocí výrazů cesty JSON můžete odkazovat na vlastnosti objektů JSON.
Při volání následujících funkcí musíte zadat výraz cesty.
- Při volání OPENJSON k vytvoření relačního zobrazení dat JSON.
- Při volání JSON_VALUE extrahovat hodnotu z textu JSON.
- Při volání funkce JSON_QUERY k extrahování objektu JSON nebo pole.
- Při volání JSON_MODIFY dojde k aktualizaci hodnoty vlastnosti v řetězci JSON.
Části výrazu cesty
Výraz cesty má dvě komponenty.
Volitelný režim cesty s hodnotou
laxnebostrict.Samotná cesta.
Režim cesty
Na začátku výrazu cesty volitelně deklarujte režim cesty zadáním klíčového slova lax nebo strict. Výchozí hodnota je lax.
V
laxrežimu vrátí funkce prázdné hodnoty, pokud výraz cesty obsahuje chybu. Pokud například požadujete hodnotu$.namea text JSON neobsahujenameklíč, vrátí funkce hodnotu null, ale nevyvolá chybu.V
strictrežimu funkce vyvolá chybu, pokud výraz cesty obsahuje chybu.
Následující dotaz explicitně určuje lax režim ve výrazu cesty.
DECLARE @json AS NVARCHAR (MAX);
SET @json = N'{ ... }';
SELECT *
FROM OPENJSON (@json, N'lax $.info');
Path
Po volitelném určení režimu cesty zadejte samotnou cestu.
Znak dolaru (
$) představuje kontextovou položku.Cesta k vlastnosti je sada kroků cesty. Kroky cesty můžou obsahovat následující prvky a operátory.
Názvy klíčů. Příklad:
$.namea$."first name". Pokud název klíče začíná znakem dolaru nebo obsahuje speciální znaky, jako jsou mezery nebo tečkové operátory(.), obklopte ho uvozovkami.Prvky pole. Například:
$.product[3]. Pole jsou založená na nule.Operátor tečky (
.) označuje člena objektu. Například v$.people[1].surname,surnameje dítěpeople.Vyhledávání se zástupnými znaky pole a vyhledávání rozsahů jsou podporovány také v případě, že je vstup hodnotou typu JSON.
Podpora zástupných znaků pole a rozsahu
Note
Podpora zástupných znaků v polích a rozsahů je momentálně ve verzi preview a je dostupná pouze v SQL Serveru 2025 (17.x).
SQL Server 2025 (17.x) rozšiřuje podporu výrazů cesty ANSI SQL/JSON, aby zahrnovala zástupný znak pro pole. Zástupný znak Array umožňuje zadat všechny prvky, rozsah prvků, seznam prvků nebo speciální token "last" označující poslední hodnotu v poli JSON. Pole SQL/JSON používají index založený na nule. V JSON_QUERY, JSON_PATH_EXISTS a JSON_CONTAINS je možné použít cestu SQL/JSON se zástupnými cardy.
Zatímco JSON_VALUE funkce podporuje výraz cesty SQL/JSON, návratová JSON_VALUE hodnota funkce je skalární jazyk SQL, a proto funkce vždy vrací NULL pro libovolnou cestu SQL/JSON, která odkazuje na objekt nebo pole JSON. Zástupné znaky pro pole jsou podporovány pouze v případě, že vstup je typu JSON.
Následující syntaxe ukazuje, jak se dá použít zástupný znak, rozsah a speciální token last :
path[elements ]
elements ::= {
*
| number
| number to number
| last
| {number...[, number] }
}
Speciální token last lze použít místo číselné hodnoty. Pokud je zadaná oblast, je potřeba zadat rozsah v rostoucím pořadí.
Příklady některých platných výrazů cesty SQL/JSON:
| Path | Description |
|---|---|
$[*] |
Všechny prvky |
$[0] |
První prvek |
$[0 to 2] |
První tři prvky |
$[last] |
Poslední prvek |
$[last, 0] |
Invalid |
$[last, 2, 0, last] |
Invalid |
$.creditcards[0].type |
Vrátí hodnotu vlastnosti typu prvního prvku v creditcards poli. |
$.credit_cards[*].type |
Vrátí hodnotu vlastnosti typu všech prvků v creditcards poli. |
$.credit_cards[0, 2].type |
Vrátí hodnotu vlastnosti typu prvního a třetího prvku v creditcards poli. |
$.credit_cards[1 to 3].type |
Vrátí hodnotu vlastnosti typu druhého až čtvrtého prvku v creditcards pole. |
$.credit_cards[last].type |
Vrátí hodnotu vlastnosti typu posledního prvku v creditcards poli. |
$.credit_cards[last, 0].type |
Vrátí hodnotu vlastnosti typu posledního a prvního prvku v creditcards poli. |
Examples
Příklady v této části odkazují na následující text JSON.
{
"people": [{
"name": "John",
"surname": "Doe"
}, {
"name": "Jane",
"surname": null,
"active": true
}]
}
Následující tabulka uvádí několik příkladů výrazů cesty.
| Výraz cesty | 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"] |
Jak integrované funkce zpracovávají duplicitní cesty
Pokud text JSON obsahuje duplicitní vlastnosti – například dva klíče se stejným názvem na stejné úrovni – JSON_VALUE vrátí funkce JSON_QUERY pouze první hodnotu, která odpovídá cestě. K analýze objektu JSON, který obsahuje duplicitní klíče a vrácení všech hodnot, použijte OPENJSON, jak je znázorněno v následujícím příkladu.
DECLARE @json AS NVARCHAR (MAX);
SET @json = N'{"person":{"info":{"name":"John", "name":"Jack"}}}';
SELECT value
FROM OPENJSON (@json, '$.person.info');
Další informace o formátu JSON
Vizuální úvod k integrované podpoře JSON najdete v následujícím videu: