JSON_QUERY (T-SQL)
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
Mengekstrak objek atau array dari string JSON.
Untuk mengekstrak nilai skalar dari string JSON alih-alih objek atau array, lihat JSON_VALUE (Transact-SQL). Untuk informasi tentang perbedaan antara JSON_VALUE dan JSON_QUERY
, lihat Membandingkan JSON_VALUE dan JSON_QUERY.
Sintaks
JSON_QUERY ( expression [ , path ] )
Argumen
expression
Ekspresi. Biasanya nama variabel atau kolom yang berisi teks JSON.
Jika JSON_QUERY
menemukan JSON yang tidak valid dalam ekspresi sebelum menemukan nilai yang diidentifikasi berdasarkan jalur, fungsi mengembalikan kesalahan. Jika JSON_QUERY
tidak menemukan nilai yang diidentifikasi berdasarkan jalur, nilai tersebut memindai seluruh teks dan mengembalikan kesalahan jika menemukan JSON yang tidak valid di mana saja dalam ekspresi.
jalan
Jalur JSON yang menentukan objek atau array yang akan diekstrak.
Di SQL Server 2017 (14.x) dan di Azure SQL Database, Anda dapat memberikan variabel sebagai nilai jalur.
Jalur JSON dapat menentukan mode laks atau ketat untuk penguraian. Jika Anda tidak menentukan mode penguraian, mode lax adalah default. Untuk informasi selengkapnya, lihat Ekspresi Jalur JSON (SQL Server).
Nilai default untuk jalur adalah '$'. Akibatnya, jika Anda tidak memberikan nilai untuk jalur, JSON_QUERY
mengembalikan ekspresi input.
Jika format jalur tidak valid, JSON_QUERY
mengembalikan kesalahan.
Nilai hasil
Mengembalikan fragmen JSON jenis nvarchar(maks). Kolase nilai yang dikembalikan sama dengan kolase ekspresi input.
Jika nilai bukan objek atau array:
Dalam mode laks,
JSON_QUERY
mengembalikan null.Dalam mode ketat,
JSON_QUERY
mengembalikan kesalahan.
Keterangan
Mode laks dan mode ketat
Pertimbangkan teks JSON berikut:
{
"info": {
"type": 1,
"address": {
"town": "Cheltenham",
"county": "Gloucestershire",
"country": "England"
},
"tags": ["Sport", "Water polo"]
},
"type": "Basic"
}
Tabel berikut membandingkan perilaku JSON_QUERY
dalam mode lax dan dalam mode ketat. Untuk informasi selengkapnya tentang spesifikasi mode jalur opsional (lax atau ketat), lihat Ekspresi Jalur JSON (SQL Server).
Jalur | Mengembalikan nilai dalam mode laks | Mengembalikan nilai dalam mode ketat | Info selengkapnya |
---|---|---|---|
$ | Mengembalikan seluruh teks JSON. | Mengembalikan seluruh teks JSON. | T/a |
$.info.type | NULL | Kesalahan | Bukan objek atau array. Gunakan JSON_VALUE sebagai gantinya. |
$.info.address.town | NULL | Kesalahan | Bukan objek atau array. Gunakan JSON_VALUE sebagai gantinya. |
$.info." alamat" | N'{ "town":"Cheltenham", "county":"Gloucestershire", "country":"England" }' | N'{ "town":"Cheltenham", "county":"Gloucestershire", "country":"England" }' | T/a |
$.info.tags | N'[ "Sport", "Polo air"]' | N'[ "Sport", "Polo air"]' | T/a |
$.info.type[0] | NULL | Kesalahan | Bukan array. |
$.info.none | NULL | Kesalahan | Properti tidak ada. |
Menggunakan JSON_QUERY dengan FOR JSON
JSON_QUERY
mengembalikan fragmen JSON yang valid. Akibatnya, FOR JSON tidak lolos dari karakter khusus dalam nilai pengembalian JSON_QUERY
.
Jika Anda mengembalikan hasil dengan FOR JSON, dan Anda menyertakan data yang sudah dalam format JSON (dalam kolom atau sebagai hasil ekspresi), bungkus data JSON dengan JSON_QUERY
tanpa parameter jalur .
Contoh
Contoh 1
Contoh berikut menunjukkan cara mengembalikan fragmen JSON dari CustomFields
kolom dalam hasil kueri.
SELECT PersonID,FullName,
JSON_QUERY(CustomFields,'$.OtherLanguages') AS Languages
FROM Application.People
Contoh 2
Contoh berikut menunjukkan cara menyertakan fragmen JSON dalam output klausul FOR JSON.
SELECT StockItemID, StockItemName,
JSON_QUERY(Tags) as Tags,
JSON_QUERY(CONCAT('["',ValidFrom,'","',ValidTo,'"]')) ValidityPeriod
FROM Warehouse.StockItems
FOR JSON PATH