Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

JSON trong SQL Server

JSON ( J ava S cript O bject N otation) là tiêu chuẩn rất phổ biến để trao đổi dữ liệu đặc biệt trong API REST. Hầu hết tất cả các trang web hiện đại, ứng dụng Android hoặc iOS đều sử dụng tính năng này để trao đổi dữ liệu với máy chủ. Từ SQL Server 2016, Microsoft mở rộng hỗ trợ cho JSON thông qua một số chức năng tích hợp. Bằng cách này, SQL Server hỗ trợ các tính năng NOSQL trong cơ sở dữ liệu quan hệ truyền thống. Hãy kiểm tra nó:

  • ISJSON - kiểm tra một chuỗi xem có phải là JSON hợp lệ hay không
  • JSON_VALUE - truy xuất giá trị từ một chuỗi JSON
  • JSON_QUERY - tìm nạp đối tượng hoặc mảng từ chuỗi JSON
  • JSON_MODIFY - trả về chuỗi JSON đã cập nhật
  • OPENJSON - phân tích cú pháp văn bản JSON và trả về các đối tượng và thuộc tính từ đầu vào JSON dưới dạng hàng và cột
  • Mệnh đề FOR ​​JSON - xuất dữ liệu SQL sang định dạng JSON

Hàm 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);

Đầu ra

1 -- 1 if it is a valid JSON otherwise 0

Hàm JSON_VALUE

Hàm này được sử dụng để lấy một giá trị vô hướng từ một chuỗi JSON. Cú pháp của nó là

JSON_VALUE(expression, path)

biểu thức là tên của một biến hoặc một cột chứa văn bản JSON và là thuộc tính để trích xuất. Ví dụ:chạy câu lệnh dưới đây trên chuỗi JSON ở trên sẽ mang lại kết quả bên dưới:

SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')

Đầu ra

5548-0246-6336-5664

Hàm JSON_VALUE trả về một giá trị văn bản đơn lẻ kiểu nvarchar (4000). Nó trả về null nếu không tìm thấy đường dẫn đã chỉ định trong đối tượng JSON hoặc giá trị vượt quá nvarchar (4000). Sử dụng ‘ nghiêm ngặt Từ khóa ‘trước đường dẫn sẽ xuất hiện lỗi nếu đường dẫn được chỉ định không có sẵn trong đối tượng JSON.

Hàm JSON_QUERY

The Hàm JSON_QUERY (biểu thức [, đường dẫn]) lấy tên của một biến hoặc một cột chứa văn bản JSON và đường dẫn JSON chỉ định đối tượng hoặc mảng để trích xuất làm đối số của nó.

Đầu ra

Nó trả về một phân đoạn JSON kiểu nvarchar (max) . Giống như hàm JSON_VALUE trả về null nếu giá trị được chỉ định không phải là một đối tượng hoặc một mảng. Việc sử dụng từ khóa 'nghiêm ngặt' sẽ gây ra lỗi.

Hàm JSON_MODIFY

Nó cập nhật giá trị của một thuộc tính trong một chuỗi JSON và trả về chuỗi JSON đã cập nhật. Nó nhận biểu thức, đường dẫn và new làm đối số. Sử dụng hàm này, chúng ta có thể thực hiện thao tác dưới đây trên chuỗi JSON:

  1. Cập nhật
  2. Chèn
  3. Xóa
  4. Nối
1. Cập nhật

Cập nhật giá trị của một đường dẫn nhất định.

SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')

Đầu ra

2. Chèn

Giá trị mới được thêm vào chuỗi JSON nếu thuộc tính trong đường dẫn đã cung cấp không tồn tại. Nếu không, nó sẽ cập nhật giá trị hiện có theo ví dụ trên. Thuộc tính mới được thêm vào cuối JSON.

SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')

Đầu ra

3. Xóa

Đặt giá trị NULL vào đường dẫn sẽ loại bỏ nó.

SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)

Đầu ra

4. Nối

Phần tử mới có thể được thêm vào trong mảng như sau:

SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')

Đầu ra

Hàm OPENJSON

Đây là một hàm có giá trị bảng, phân tích cú pháp văn bản JSON và trả về các đối tượng và thuộc tính từ đầu vào JSON dưới dạng hàng và cột.

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
)

Đầu ra

Mệnh đề JSON

Mệnh đề này được sử dụng rộng rãi với TSQL để xuất dữ liệu bảng SQL sang định dạng JSON. Nó có hai biến thể:

  • TỰ ĐỘNG - Đầu ra JSON mặc định được tạo bằng tùy chọn TỰ ĐỘNG.
  • PATH - Cấu trúc của JSON có thể được sửa đổi theo tên cột hoặc bí danh bằng cách sử dụng tùy chọn 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

Đầu ra

Kết luận

Đây là tất cả về JSON trong SQL Server. Chúc bạn TSQLing vui vẻ!

Bài viết này được lấy từ blog của tôi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hàm CHAR () hoạt động trong SQL Server (T-SQL)

  2. Tính toán số tháng đầy đủ giữa hai ngày trong SQL

  3. Sự khác biệt giữa các hàm được định giá trong bảng của nhiều câu lệnh &các hàm được định giá trong bảng trong dòng trong SQL Server

  4. Sử dụng SQL Server làm kho lưu trữ hình ảnh

  5. Cách gửi email từ SQL Server (T-SQL)