Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

JSON di SQL Server

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:

  1. Perbarui
  2. Sisipkan
  3. Hapus
  4. 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya mengaktifkan aign_dup_key untuk kunci utama?

  2. Cara Menemukan Nama Batasan di SQL Server

  3. Temukan tanggal terdekat di SQL Server

  4. Masalah penyebaran laporan SSRS 2014

  5. Cara Menampilkan Susunan Kolom di SQL Server (T-SQL)