JSON_QUERY (T-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru Azure SQL Database Azure SQL Managed InstanceAzure 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.

Konvensi sintaks transact-SQL

Sintaks

JSON_QUERY ( expression [ , path ] )  

Argumen

ekspresi
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, JSON_QUERY memindai seluruh teks dan mengembalikan kesalahan jika menemukan JSON yang tidak valid di mana saja dalam ekspresi.

jalur
Jalur JSON yang menentukan objek atau array yang akan diekstrak.

Di SQL Server 2017 (14.x) dan di database Azure SQL, 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 kembali

Mengembalikan fragmen JSON jenis nvarchar(maks). Kolase nilai yang dikembalikan sama dengan kolase ekspresi input.

Jika nilainya 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 laks 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'[ "Olahraga", "Polo air"]' N'[ "Olahraga", "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 dari 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 klausa FOR JSON.

SELECT StockItemID, StockItemName,
         JSON_QUERY(Tags) as Tags,
         JSON_QUERY(CONCAT('["',ValidFrom,'","',ValidTo,'"]')) ValidityPeriod
FROM Warehouse.StockItems
FOR JSON PATH

Lihat juga