JSON_VALUE (Transact-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Mengekstrak nilai skalar dari string JSON.

Untuk mengekstrak objek atau array dari string JSON alih-alih nilai skalar, lihat JSON_QUERY (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_VALUE ( expression , path )  

Argumen

ekspresi
Ekspresi. Biasanya nama variabel atau kolom yang berisi teks JSON.

Jika JSON_VALUE menemukan JSON yang tidak valid dalam ekspresi sebelum menemukan nilai yang diidentifikasi berdasarkan jalur, fungsi mengembalikan kesalahan. Jika JSON_VALUE tidak menemukan nilai yang diidentifikasi berdasarkan jalur, ia memindai seluruh teks dan mengembalikan kesalahan jika menemukan JSON yang tidak valid di mana saja dalam ekspresi.

jalur
Jalur JSON yang menentukan properti untuk diekstrak. Untuk informasi selengkapnya, lihat Ekspresi Jalur JSON (SQL Server).

Di SQL Server 2017 (14.x) dan di Azure SQL Database, Anda dapat memberikan variabel sebagai nilai jalur.

Jika format jalur tidak valid, JSON_VALUE mengembalikan kesalahan.

Nilai kembali

Mengembalikan nilai teks tunggal jenis nvarchar(4000). Kolase nilai yang dikembalikan sama dengan kolase ekspresi input.

Jika nilainya lebih besar dari 4000 karakter:

  • Dalam mode lax, JSON_VALUE mengembalikan null.

  • Dalam mode ketat, JSON_VALUE mengembalikan kesalahan.

Jika Anda harus mengembalikan nilai skalar yang lebih besar dari 4000 karakter, gunakan OPENJSON alih-alihJSON_VALUE. Untuk informasi selengkapnya, lihat OPENJSON (Transact-SQL).

Keterangan

Mode lax dan mode ketat

Pertimbangkan teks JSON berikut:

DECLARE @jsonInfo NVARCHAR(MAX)

SET @jsonInfo=N'{  
     "info":{    
       "type":1,  
       "address":{    
         "town":"Bristol",  
         "county":"Avon",  
         "country":"England"  
       },  
       "tags":["Sport", "Water polo"]  
    },  
    "type":"Basic"  
 }'  

Tabel berikut membandingkan perilaku JSON_VALUE 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 lax Mengembalikan nilai dalam mode ketat Info selengkapnya
$ NULL Kesalahan Bukan nilai skalar.

Gunakan JSON_QUERY sebagai gantinya.
$.info.type N'1' N'1' T/a
$.info.address.town N'Bristol' N'Bristol' T/a
$.info." alamat" NULL Kesalahan Bukan nilai skalar.

Gunakan JSON_QUERY sebagai gantinya.
$.info.tags NULL Kesalahan Bukan nilai skalar.

Gunakan JSON_QUERY sebagai gantinya.
$.info.type[0] NULL Kesalahan Bukan array.
$.info.none NULL Kesalahan Properti tidak ada.

Contoh

Contoh 1

Contoh berikut menggunakan nilai properti town JSON dan state dalam hasil kueri. Karena JSON_VALUE mempertahankan kolase sumber, urutan pengurutan hasil bergantung pada kolase jsonInfo kolom.

Catatan

(Contoh ini mengasumsikan bahwa tabel bernama Person.Person berisi jsonInfo kolom teks JSON, dan bahwa kolom ini memiliki struktur yang ditunjukkan sebelumnya dalam diskusi mode lax dan mode ketat. Dalam database sampel AdventureWorks, Person tabel sebenarnya tidak berisi jsonInfo kolom.)

SELECT FirstName, LastName,
 JSON_VALUE(jsonInfo,'$.info.address.town') AS Town
FROM Person.Person
WHERE JSON_VALUE(jsonInfo,'$.info.address.state') LIKE 'US%'
ORDER BY JSON_VALUE(jsonInfo,'$.info.address.town')

Contoh 2

Contoh berikut mengekstrak nilai properti town JSON ke dalam variabel lokal.

DECLARE @jsonInfo NVARCHAR(MAX)
DECLARE @town NVARCHAR(32)

SET @jsonInfo=N'{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}';

SET @town=JSON_VALUE(@jsonInfo,'$.info.address[0].town'); -- Paris
SET @town=JSON_VALUE(@jsonInfo,'$.info.address[1].town'); -- London

Contoh: 3

Contoh berikut membuat kolom komputasi berdasarkan nilai properti JSON.

CREATE TABLE dbo.Store
 (
  StoreID INT IDENTITY(1,1) NOT NULL,
  Address VARCHAR(500),
  jsonContent NVARCHAR(4000),
  Longitude AS JSON_VALUE(jsonContent, '$.address[0].longitude'),
  Latitude AS JSON_VALUE(jsonContent, '$.address[0].latitude')
 )

Lihat juga

Ekspresi Jalur JSON (SQL Server)
Data JSON (SQL Server)