JSON (J аваСи криптО обектN otation) е много популярен стандарт за обмен на данни, специално в REST API. Почти всички съвременни уебсайтове, приложения за Android или iOS използват това за обмен на данни със сървъра. От SQL Server 2016 Microsoft разширява поддръжката си за JSON чрез няколко вградени функции. По този начин SQL Server поддържа NOSQL функции в традиционните релационни бази данни. Нека го разгледаме:
- ISJSON – проверява низ дали е валиден JSON или не
- JSON_VALUE – извлича стойност от JSON низ
- JSON_QUERY – извлича обект или масив от JSON низ
- JSON_MODIFY – връща актуализирания JSON низ
- OPENJSON – анализира JSON текст и връща обекти и свойства от JSON входа като редове и колони
- Клауза FOR JSON – експортира SQL данни във формат JSON
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);
Изход
1 -- 1 if it is a valid JSON otherwise 0
Функция JSON_VALUE
Тази функция се използва за извличане на скаларна стойност от JSON низ. Синтаксисът му е
JSON_VALUE(expression, path)
израз е името на променлива или колона, която съдържа JSON текст и е свойството за извличане. Например, изпълнението на оператора по-долу върху горния JSON низ ще даде по-долу изход:
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
Изход
5548-0246-6336-5664
Функцията JSON_VALUE връща единична текстова стойност от тип nvarchar(4000) . Връща null ако посоченият път не е намерен в JSON обекта или стойността е извън nvarchar(4000). Използване на ‘строго ‘ ключова дума преди пътя ще изведе грешката, ако посоченият път не е наличен в JSON обекта.
Функция JSON_QUERY
Функцията JSON_QUERY(израз [,път]) приема името на променлива или колона, която съдържа JSON текст и JSON пътя, който посочва обекта или масива за извличане като негови аргументи.
Изход
Връща JSON фрагмент от тип nvarchar(max) . Подобно на функцията JSON_VALUE връща null, ако посочената стойност не е обект или масив. Използването на ключова дума „строга“ ще доведе до грешка.
Функция JSON_MODIFY
Той актуализира стойността на свойство в JSON низ и връща актуализирания JSON низ. Той приема израз, път и ново като аргументи. Използвайки тази функция, можем да извършим операция по-долу върху JSON низ:
- Актуализиране
- Вмъкване
- Изтриване
- Добавяне
1. Актуализация
Актуализира стойността на даден път.
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
Изход
2. Вмъкване
Нова стойност се добавя в JSON низ, ако атрибутът в предоставения път не съществува. В противен случай той ще актуализира съществуващата стойност съгласно горния пример. Новият атрибут се добавя в края на JSON.
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
Изход
3. Изтриване
Поставянето на стойност NULL в пътя просто ще я премахне.
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
Изход
4. Добавяне
Нов елемент може да бъде добавен в масив, както следва:
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
Изход
Функция OPENJSON
Това е функция с таблична стойност, която анализира JSON текст и връща обекти и свойства от JSON входа като редове и колони.
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 )
Изход
Клауза ЗА JSON
Тази клауза се използва широко с TSQL за експортиране на данни от SQL таблица във формат JSON. Има два варианта:
- АВТОМАТИЧНО – JSON изходът по подразбиране се генерира с помощта на опция AUTO.
- PATH – Структурата на JSON може да бъде променена от името на колоната или псевдоними с помощта на опция 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
Изход
Заключение
Това е всичко за JSON в SQL Server. Честит TSQLing!
Тази статия е взета от моя блог.