Sdílet prostřednictvím


Výrazy cesty JSON v databázovém stroji SQL

Platí pro: SQL Server 2016 (13.x) a novější verze Azure SQL DatabaseAzure SQL Managed InstanceAzure 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.

  1. Volitelný režim cesty s hodnotou lax nebo strict.

  2. 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 lax režimu vrátí funkce prázdné hodnoty, pokud výraz cesty obsahuje chybu. Pokud například požadujete hodnotu $.namea text JSON neobsahuje name klíč, vrátí funkce hodnotu null, ale nevyvolá chybu.

  • V strict rež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: $.name a $."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, surname je 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: