Megosztás a következőn keresztül:


JSON-elérési útvonal kifejezések az SQL-databázis motorban

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziókAzure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics (csak serverless SQL pool)SQL-adatbázis a Microsoft Fabricban

JSON-elérésiút-kifejezések használatával hivatkozhat a JSON-objektumok tulajdonságaira.

Az alábbi függvények meghívásához meg kell adnia egy elérési útkifejezést.

Elérésiút-kifejezés részei

Egy elérésiút-kifejezés két összetevőből áll.

  1. Az opcionális útvonal mód, lax vagy strict értékkel.

  2. Maga az elérési út.

Útvonal mód

Az elérési út kifejezésének elején opcionálisan megadhatja az útvonal módját a kulcsszó lax vagy strict használatával. Az alapértelmezett érték a lax.

  • Módban lax a függvény üres értékeket ad vissza, ha az elérési út kifejezése hibát tartalmaz. Ha például az értéket $.namekéri, és a JSON-szöveg nem tartalmaz name kulcsot, a függvény null értéket ad vissza, de nem okoz hibát.

  • Módban strict a függvény hibát jelez, ha az elérési út kifejezése hibát tartalmaz.

Az alábbi lekérdezés explicit módon határozza meg lax a módot az elérési út kifejezésében.

DECLARE @json AS NVARCHAR (MAX);

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

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

Path

Az opcionális elérésiút-mód deklarációja után adja meg magát az elérési utat.

  • A dollárjel ($) a környezeti elemet jelöli.

  • Az elérési út egy tulajdonságútvonal lépéseinek halmaza. Az elérési út lépései a következő elemeket és operátorokat tartalmazhatják.

    • Kulcsnevek. Például: $.name és $."first name". Ha a kulcs neve dollárjellel kezdődik, vagy speciális karaktereket, például szóközöket vagy pont operátorokat(.) tartalmaz, akkor idézőjelek veszik körül.

    • Tömbelemek. Például: $.product[3]. A tömbök nulla alapúak.

    • A pont operátor (.) egy objektum egy tagját jelzi. Például, a $.people[1].surname esetében, a surname a people gyermeke.

    • A tömbbeli helyettesítő karakterek és a tartománykeresések akkor is támogatottak, ha a bemenet JSON-típusérték.

Tömb helyettesítő karakter és tartomány támogatása

Note

A tömb helyettesítő karakterének és tartományának támogatása jelenleg előzetes verzióban érhető el, és csak az SQL Server 2025-ben (17.x) érhető el.

Az SQL Server 2025 (17.x) kiterjeszti az ANSI SQL/JSON elérési út kifejezését egy tömb helyettesítő karakterének támogatásához. A Tömb joker karakter lehetővé teszi, hogy megadja az összes elemet, elemtartományt, elemlistát, vagy a "last" speciális jelzőt, a JSON-tömb utolsó értékének megjelölésére. Az SQL/JSON-tömbök nulla alapú indexet használnak. Az SQL/JSON-elérési út helyettesítő karakterekkel a JSON_QUERY, JSON_PATH_EXISTS és JSON_CONTAINS esetében használható.

Bár JSON_VALUE a függvény támogatja az SQL/JSON-elérési út kifejezést, a függvény visszatérési JSON_VALUE értéke egy SQL skalár, ezért a függvény mindig egy JSON-objektumra vagy tömbre mutató SQL/JSON-elérési úthoz ad vissza.NULL A tömb helyettesítő karakterei csak akkor támogatottak, ha a bemenet json típusú.

Az alábbi szintaxis bemutatja, hogyan használható a helyettesítő karakter, a tartomány és a speciális token last:

path[elements ]

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

A speciális token last a számérték helyett használható. Ha egy tartomány meg van adva, akkor a tartományt növekvő sorrendben kell megadni.

Példák néhány érvényes SQL/JSON-elérési útkifejezésre:

Path Description
$[*] Minden elem
$[0] Első elem
$[0 to 2] Első három elem
$[last] Utolsó elem
$[last, 0] Invalid
$[last, 2, 0, last] Invalid
$.creditcards[0].type A tömb első elemének creditcards típustulajdonság-értékét adja vissza
$.credit_cards[*].type A tömb összes elemének creditcards típustulajdonság-értékét adja vissza
$.credit_cards[0, 2].type A tömb első és harmadik elemének creditcards típustulajdonság-értékét adja vissza
$.credit_cards[1 to 3].type A tömb második-negyedik elemének creditcards típustulajdonság-értékét adja vissza
$.credit_cards[last].type A tömb utolsó elemének creditcards típustulajdonság-értékét adja vissza
$.credit_cards[last, 0].type A tömb utolsó és első elemének creditcards típustulajdonság-értékét adja vissza

Examples

Az ebben a szakaszban szereplő példák a következő JSON-szövegre hivatkoznak.

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

Az alábbi táblázat néhány példát mutat be az elérésiút-kifejezésekre.

Elérési út kifejezése 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"]

Hogyan kezelik a beépített függvények az ismétlődő útvonalakat?

Ha a JSON-szöveg ismétlődő tulajdonságokat tartalmaz – például két azonos nevű kulcs ugyanazon a szinten –, akkor a JSON_VALUEJSON_QUERY függvények csak az elérési útnak megfelelő első értéket adják vissza. Az ismétlődő kulcsokat tartalmazó és az összes értéket visszaadó JSON-objektum elemzéséhez használja OPENJSONaz alábbi példában látható módon.

DECLARE @json AS NVARCHAR (MAX);

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

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

További információ a JSON-ról

A beépített JSON-támogatás vizuális bemutatásához tekintse meg az alábbi videót: