Aracılığıyla paylaş


SQL Veritabanı Altyapısı'nda JSON yol ifadeleri

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (serverless SQL pool only)SQL database in Microsoft Fabric

JSON nesnelerinin özelliklerine başvurmak için JSON yol ifadelerini kullanın.

Aşağıdaki işlevleri çağırırken bir yol ifadesi sağlamanız gerekir.

  • JSON verilerinin ilişkisel bir görünümünü oluşturmak için OPENJSON'u çağırdığınızda.
  • JSON metninden bir değer ayıklamak için JSON_VALUE çağırdığınızda.
  • JSON nesnesini veya dizisini ayıklamak için JSON_QUERY çağırdığınızda.
  • JSON dizesindeki bir özelliğin değerini güncelleştirmek için JSON_MODIFY çağırdığınızda.

Yol ifadesinin bölümleri

Yol ifadesinin iki bileşeni vardır.

  1. İsteğe bağlı yol modu, lax veya strict değerine sahip.

  2. Yolun kendisi.

Yol modu

Yol ifadesinin başında, isteğe bağlı olarak lax veya strict anahtar sözcüğünü belirterek yol modunu bildirin. Varsayılan değer: lax.

  • Modda lax , yol ifadesi bir hata içeriyorsa işlev boş değerler döndürür. Örneğin, değerini $.nameisterseniz ve JSON metni bir name anahtar içermiyorsa işlev null döndürür, ancak hata oluşturmaz.

  • Modda strict , yol ifadesi bir hata içeriyorsa işlev bir hata oluşturur.

Aşağıdaki sorgu yol ifadesinde modu açıkça belirtir lax .

DECLARE @json AS NVARCHAR (MAX);

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

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

Path

İsteğe bağlı yol modu bildiriminden sonra yolun kendisini belirtin.

  • Dolar işareti ($), bağlam öğesini temsil eder.

  • Özellik yolu, bir adım kümesidir. Yol adımları aşağıdaki öğeleri ve işleçleri içerebilir.

    • Anahtar adları. Örneğin, $.name ve $."first name". Anahtar adı dolar işaretiyle başlıyorsa veya boşluk veya nokta işleçleri. gibi özel karakterler içeriyorsa, tırnak içine alın.

    • Dizi öğeleri. Örneğin, $.product[3]. Diziler sıfır tabanlıdır.

    • Nokta işleci (.), bir nesnenin üyesini gösterir. Örneğin, $.people[1].surname içinde surname, people öğesinin alt öğesidir.

    • Giriş bir JSON türü değeriyse dizi joker karakteri ve aralık aramaları da desteklenir.

Dizi joker karakter kullanımı ve aralık desteği

Note

Dizi genel karakter ve aralık desteği şu anda önizlemede ve yalnızca SQL Server 2025'te (17.x) kullanılabilir.

SQL Server 2025 (17.x), dizi joker karakterlerini desteklemek için ANSI SQL/JSON yol ifadesini genişletir. Dizi joker karakteri, bir JSON dizisindeki son değeri belirtmek için tüm öğeleri, öğe aralığını, öğe listesini veya "son" özel belirtecini belirtmenize olanak tanır. SQL/JSON dizileri sıfır tabanlı dizin kullanır. Joker karakterler içeren SQL/JSON yolu JSON_QUERY, JSON_PATH_EXISTS ve JSON_CONTAINS kullanılabilir.

İşlev SQL/JSON yol ifadesini desteklerken JSON_VALUE , işlevin JSON_VALUE dönüş değeri bir SQL skaler değeridir ve bu nedenle işlev her zaman bir JSON nesnesine veya dizisine işaret eden herhangi bir SQL/JSON yolu için döndürür NULL . Dizi joker karakterleri yalnızca giriş JSON türünde olduğunda desteklenir.

Aşağıdaki söz dizimi joker karakterin, aralığın ve özel belirtecin last nasıl kullanılabileceğini gösterir:

path[elements ]

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

Özel belirteç last sayı değeri yerine kullanılabilir. Bir aralık belirtilirse, aralığın artan sırada belirtilmesi gerekir.

Bazı geçerli SQL/JSON yol ifadelerine örnekler:

Path Description
$[*] Tüm elementler
$[0] İlk öğe
$[0 to 2] İlk üç öğe
$[last] Son öğe
$[last, 0] Invalid
$[last, 2, 0, last] Invalid
$.creditcards[0].type Dizideki ilk öğenin creditcards type özellik değerini verir
$.credit_cards[*].type Dizideki tüm öğelerin creditcards type özellik değerini verir
$.credit_cards[0, 2].type Dizideki birinci ve üçüncü öğenin creditcards type özellik değerini verir
$.credit_cards[1 to 3].type Dizideki ikinci ile dördüncü öğenin creditcards tür özelliği değerini verir
$.credit_cards[last].type Dizideki son öğenin creditcards type özellik değerini verir
$.credit_cards[last, 0].type Dizideki son ve ilk öğenin creditcards type özellik değerini verir

Examples

Bu bölümdeki örnekler aşağıdaki JSON metnine başvurur.

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

Aşağıdaki tabloda yol ifadelerinin bazı örnekleri gösterilmektedir.

Yol ifadesi 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"]

Yerleşik işlevler yinelenen yolları nasıl işler?

JSON metni yinelenen özellikler içeriyorsa (örneğin, aynı düzeyde aynı ada sahip iki anahtar) JSON_VALUE ve JSON_QUERY işlevleri yalnızca yolla eşleşen ilk değeri döndürür. Yinelenen anahtarlar içeren bir JSON nesnesini ayrıştırmak ve tüm değerleri döndürmek için, aşağıdaki örnekte gösterildiği gibi kullanın OPENJSON.

DECLARE @json AS NVARCHAR (MAX);

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

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

JSON hakkında daha fazla bilgi edinin

Yerleşik JSON desteğine görsel bir giriş için aşağıdaki videoya bakın:

  • NoSQL ile ilişkisel dünyalar arasında bir köprü olarak JSON