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:
- Cập nhật
- Chèn
- Xóa
- 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.