JSON (J avaS krip O objek N otation) adalah standar yang sangat populer untuk bertukar data khususnya di REST API. Hampir semua situs web modern, aplikasi Android atau iOS menggunakan ini untuk bertukar data dengan server. Dari SQL Server 2016, Microsoft memperluas dukungannya untuk JSON melalui beberapa fungsi bawaan. Dengan cara ini SQL Server mendukung fitur NOSQL dalam database relasional tradisional. Mari kita periksa:
- ISJSON – memeriksa string apakah JSON valid atau tidak
- JSON_VALUE – mengambil nilai dari string JSON
- JSON_QUERY – mengambil objek atau larik dari string JSON
- JSON_MODIFY – mengembalikan string JSON yang diperbarui
- OPENJSON – mem-parsing teks JSON dan mengembalikan objek dan properti dari input JSON sebagai baris dan kolom
- UNTUK Klausa JSON – mengekspor data SQL ke format JSON
Fungsi ISJSON
DECLARE @json NVARCHAR(MAX); SET @json = N'{ "info":[ { "id":"1", "name":"Robert Aragon", "ssn":"489-36-8350", "credit_card":[ "4929-3813-3266-4295", "5370-4638-8881-3020" ], "address":{ "town":"Avon", "area":"New York", "zipcode":"76148" } }, { "id":"2", "name":"Thomas Conley", "ssn":"690-05-5315", "credit_card":[ "5299-1561-5689-1938" ], "address":{ "town":"Jackson Street", "area":"New York", "zipcode":"80233" } }, { "id":"3", "name":"Susan Davis", "ssn":"421-37-1396", "credit_card":[ "5293-8502-0071-3058" ], "address":{ "town":"Rock Beach", "area":"Los angeles", "zipcode":"900341" } }, { "id":"4", "name":"Christopher Diaz", "ssn":"458-02-6124", "credit_card":[ "5548-0246-6336-5664" ], "address":{ "town":"Small town", "area":"Wasshington", "zipcode":"63126" } }, { "id":"5", "name":"Rick Edwards", "ssn":"612-20-6832", "credit_card":[ "4539-5385-7425-5825" ], "address":{ "town":"Free Town", "area":"Utah", "zipcode":"97222" } }, { "id":"6", "name":"Victor Faulkner", "ssn":"300-62-3266", "credit_card":[ "4916-9766-5240-6147", "4532-4220-6922-9909", "5218-0144-2703-9266" ], "address":{ "town":"Dakota", "area":"North Dakota", "zipcode":"92104" } } ] } '; SELECT ISJSON(@json);
Keluaran
1 -- 1 if it is a valid JSON otherwise 0
Fungsi JSON_VALUE
Fungsi ini digunakan untuk mengambil nilai skalar dari string JSON. Sintaksnya adalah
JSON_VALUE(expression, path)
ekspresi adalah nama variabel atau kolom yang berisi teks JSON dan merupakan properti yang akan diekstrak. Misalnya, menjalankan pernyataan di bawah ini pada string JSON di atas akan menghasilkan output di bawah ini:
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
Keluaran
5548-0246-6336-5664
Fungsi JSON_VALUE mengembalikan nilai teks tunggal bertipe nvarchar(4000) . Ini mengembalikan null jika jalur yang ditentukan tidak ditemukan di objek JSON atau nilainya di luar nvarchar(4000). Menggunakan ‘ketat ' kata kunci sebelum jalur akan memunculkan kesalahan jika jalur yang ditentukan tidak tersedia di objek JSON.
Fungsi JSON_QUERY
Fungsi JSON_QUERY(expression [,path]) mengambil nama variabel atau kolom yang berisi teks JSON dan jalur JSON yang menentukan objek atau larik yang akan diekstrak sebagai argumennya.
Keluaran
Ini mengembalikan fragmen JSON dari tipe nvarchar(max) . Seperti fungsi JSON_VALUE mengembalikan nol jika nilai yang ditentukan bukan objek atau larik. Menggunakan kata kunci 'ketat' akan menimbulkan kesalahan.
Fungsi JSON_MODIFY
Ini memperbarui nilai properti dalam string JSON dan mengembalikan string JSON yang diperbarui. Dibutuhkan ekspresi, jalur, dan baru sebagai argumen. Dengan menggunakan fungsi ini, kita dapat melakukan operasi di bawah ini pada string JSON:
- Perbarui
- Sisipkan
- Hapus
- Tambahkan
1. Perbarui
Memperbarui nilai jalur yang diberikan.
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
Keluaran
2. Sisipkan
Nilai baru ditambahkan dalam string JSON jika atribut di jalur yang disediakan tidak ada. Kalau tidak, itu akan memperbarui nilai yang ada sesuai contoh di atas. Atribut baru ditambahkan di akhir JSON.
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
Keluaran
3. Hapus
Menempatkan nilai NULL di jalur hanya akan menghapusnya.
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
Keluaran
4. Tambahkan
Elemen baru dapat ditambahkan dalam array seperti di bawah ini:
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
Keluaran
Fungsi OPENJSON
Ini adalah fungsi bernilai tabel yang mengurai teks JSON dan mengembalikan objek dan properti dari input JSON sebagai baris dan kolom.
DECLARE @json NVARCHAR(MAX); SET @json = N'{"id":"1", "name": "Robert Aragon", "ssn": "489-36-8350", "credit_card":["4929-3813-3266-4295","5370-4638-8881-3020"], "address": {"town": "Avon", "area": "New York", "zipcode": "76148"}}'; SELECT * FROM OpenJson(@json) with ( id int '$.id', name varchar(50) '$.name', ssn varchar(50) '$.ssn', [credit_card] nvarchar(MAX) AS JSON, [address] nvarchar(MAX) AS JSON )
Keluaran
UNTUK Klausul JSON
Klausa ini banyak digunakan dengan TSQL untuk mengekspor data tabel SQL ke format JSON. Ini memiliki dua varian:
- AUTO – Output JSON default dihasilkan menggunakan opsi AUTO.
- PATH – Struktur JSON dapat dimodifikasi dengan nama kolom atau alias menggunakan opsi PATH
IF OBJECT_ID('Test1', 'U') IS NOT NULL DROP TABLE Test1; GO -- Create the table CREATE TABLE Test1( pk_id int not null identity(1,1), name varchar(10) default ('Mehedi') ) GO -- Populate with 3 sample data INSERT INTO Test1 default values GO 2 IF OBJECT_ID('Test2', 'U') IS NOT NULL DROP TABLE Test2; GO -- Create the table CREATE TABLE Test2( pk_id int not null identity(1,1), area varchar(10) default ('Dhanmondi'), city varchar(10) default ('Dhaka') ) GO -- Populate with 3 sample data INSERT INTO Test2 default values GO 1 -- Example of AUTO SELECT A.pk_id, A.name, (SELECT pk_id, area, city FROM Test2 B WHERE A.pk_id = B.pk_id FOR JSON AUTO ) as test2 FROM Test1 A FOR JSON AUTO -- Example of PATH SELECT A.pk_id, A.name, (SELECT pk_id as id, area, city FROM Test2 B WHERE A.pk_id = B.pk_id FOR JSON AUTO ) as test2 FROM Test1 A FOR JSON PATH , ROOT ('EmployeeInfo') GO
Keluaran
Kesimpulan
Ini semua tentang JSON di SQL Server. Selamat TSQL!
Artikel ini diambil dari blog saya.