Bagikan melalui


Ekspresi jalur JSON di Mesin Database SQL

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru Azure SQL Database AzureSQL Managed InstanceAzure Synapse Analytics (hanya kumpulan SQL tanpa server)Database SQL di Microsoft Fabric

Gunakan ekspresi jalur JSON untuk mereferensikan properti objek JSON.

Anda harus memberikan ekspresi jalur saat memanggil fungsi berikut.

  • Saat Anda memanggil OPENJSON untuk membuat tampilan relasional data JSON.
  • Saat Anda memanggil JSON_VALUE untuk mengekstrak nilai dari teks JSON.
  • Saat Anda memanggil JSON_QUERY untuk mengekstrak objek JSON atau array.
  • Saat Anda memanggil JSON_MODIFY untuk memperbarui nilai properti dalam string JSON.

Bagian dari ekspresi jalur

Ekspresi jalur memiliki dua komponen.

  1. Mode jalur opsional, dengan nilai lax atau strict.

  2. Jalan itu sendiri.

Mode jalur

Di awal ekspresi jalur, secara opsional deklarasikan mode jalur dengan menentukan kata kunci lax atau strict. Defaultnya adalah lax.

  • Dalam lax mode, fungsi mengembalikan nilai kosong jika ekspresi jalur berisi kesalahan. Misalnya, jika Anda meminta nilai $.name, dan teks JSON tidak berisi name kunci, fungsi mengembalikan null, tetapi tidak menimbulkan kesalahan.

  • Dalam strict mode, fungsi menimbulkan kesalahan jika ekspresi jalur berisi kesalahan.

Kueri berikut secara eksplisit menentukan lax mode dalam ekspresi jalur.

DECLARE @json AS NVARCHAR (MAX);

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

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

Path

Setelah deklarasi mode jalur opsional, tentukan jalur itu sendiri.

  • Tanda dolar ($) mewakili item konteks.

  • Jalur properti adalah sekumpulan langkah jalur. Langkah-langkah jalur dapat berisi elemen dan operator berikut.

    • Nama kunci. Misalnya, $.name dan $."first name". Jika nama kunci dimulai dengan tanda dolar atau berisi karakter khusus seperti operator spasi atau titik(.), kelilingi dengan tanda kutip.

    • Elemen array. Contohnya,$.product[3]. Array berbasis nol.

    • Operator titik (.) menunjukkan anggota objek. Misalnya, dalam $.people[1].surname, surname adalah anak dari people.

    • Pencarian dengan wildcard pada array dan pencarian rentang juga didukung jika input adalah nilai tipe JSON.

Dukungan untuk simbol pengganti dan rentang array

Note

Array wildcard dan dukungan rentang sedang dalam tahap pratinjau dan hanya tersedia di SQL Server 2025 (17.x).

SQL Server 2025 (17.x) memperluas ekspresi jalur ANSI SQL/JSON untuk mendukung wildcard array. Wildcard Array memungkinkan Anda menentukan semua elemen, rentang elemen, daftar elemen, atau token khusus "terakhir" untuk menunjukkan nilai terakhir dalam array JSON. Array SQL/JSON menggunakan indeks berbasis nol. Jalur SQL/JSON dengan wildcard dapat digunakan dalam JSON_QUERY, JSON_PATH_EXISTS, dan JSON_CONTAINS.

Meskipun JSON_VALUE fungsi mendukung ekspresi jalur SQL/JSON, nilai JSON_VALUE pengembalian fungsi adalah skalar SQL dan karenanya fungsi selalu kembali NULL untuk jalur SQL/JSON apa pun yang menunjuk ke objek atau array JSON. Wildcard array hanya didukung jika input adalah jenis json .

Sintaks berikut menunjukkan bagaimana wildcard, rentang, dan token last khusus dapat digunakan:

path[elements ]

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

Token last khusus dapat digunakan sebagai pengganti nilai angka. Jika rentang ditentukan, maka rentang perlu ditentukan dalam urutan yang meningkat.

Contoh beberapa ekspresi jalur SQL/JSON yang valid:

Path Description
$[*] Semua elemen
$[0] Elemen pertama
$[0 to 2] Tiga elemen pertama
$[last] Elemen terakhir
$[last, 0] Invalid
$[last, 2, 0, last] Invalid
$.creditcards[0].type Mengembalikan nilai properti jenis elemen pertama dalam creditcards array
$.credit_cards[*].type Mengembalikan nilai properti jenis dari semua elemen dalam creditcards array
$.credit_cards[0, 2].type Mengembalikan nilai properti jenis elemen pertama dan ketiga dalam creditcards array
$.credit_cards[1 to 3].type Mengembalikan nilai properti jenis elemen kedua hingga keempat dalam creditcards array
$.credit_cards[last].type Mengembalikan nilai properti jenis elemen terakhir dalam creditcards array
$.credit_cards[last, 0].type Mengembalikan nilai properti jenis elemen terakhir dan pertama dalam creditcards array

Examples

Contoh di bagian ini mereferensikan teks JSON berikut.

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

Tabel berikut ini memperlihatkan beberapa contoh ekspresi jalur.

Ekspresi jalur (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"]

Cara fungsi bawaan menangani jalur duplikat

Jika teks JSON berisi properti duplikat - misalnya, dua kunci dengan nama yang sama pada tingkat yang sama - JSON_VALUE fungsi dan JSON_QUERY hanya mengembalikan nilai pertama yang cocok dengan jalur. Untuk mengurai objek JSON yang berisi kunci duplikat dan mengembalikan semua nilai, gunakan OPENJSON, seperti yang ditunjukkan dalam contoh berikut.

DECLARE @json AS NVARCHAR (MAX);

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

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

Pelajari selengkapnya tentang JSON

Untuk pengenalan visual dukungan JSON bawaan, lihat video berikut ini: