12 fevral 2020 - 04:00
JSON SQL Server 2016-da (1-ci hissə
Json formatı SQL Server 2016 versiyasından başlayaraq tərbiq edilməyə başlanılıb.
12 fevral 2020 - 04:00
Json formatı SQL Server 2016 versiyasından başlayaraq tərbiq edilməyə başlanılıb.SQL Serverdə Json format tipini XML tipi (SQL Server 2000-dən başlayaraq dəstəklənir) ilə müqayisə etmək olar. Json XML-dən fərqli olaraq daha az həcmdə eyni məlumatı saxlayır.Daha az həcm daha tez emal olunma deməkdir.XML-dən fərqli olaraq teqlər istifadə olunmur.
JSON-un qısa təsviri:
· { }- obyektin bağlanması
· {“key” : ”value”} – obyektlər üçün daha çox istifadə olunan format
· İç-içə istifadə olunan obyektlər
{“key”:
{“key”:”value”}
}
JSON ilə massivlərin təsviri
· []- massiv şəklində olan obyektin təsviri
{“key”:
[
{“key”:”value”},
{“key”:”value”}
]
}
Bunlar JSON-u təsvir etmək üçün, üzərində əməliyyatlar aparmaq üçün kifayət edir.
XML-in özünün xüsusi xml data tipi var. Amma Json-nun xüsusi tipi yoxdur.tekst tiplərindən hər hansı birin seçə bilərik Json üçün. Aşağıdakı nümunəyə baxaq:
declare @x xml=
‘
’;
declare @json varchar(max)=
‘{
“info”:{
“specialization”:”computer science”,
“course_number”:1,
“address”:{
“town”:”Moscow”
“region”:”Moscow”
“country”:”Russia”
},
“parents”:[“Anna”,”Peter”]
},
“type”:”student”
}’
Eyni bir informasiyanı hər iki tipdə göstəririk. Gödüyünüz kimi Json-u varchar() tipi ilə təyin etmişik. Bunların həcmini aşağıdakı sorğu ilə müqayisə edək:
Select DATALENGTH(@x) as xml_size, DATALENGTH(@json) as json_size
Qeyd: sizdə fərqli qiymətlər alına bilər. Çünki json varchar() tipində olduğundan hər boşluğa da 1 bayt yer tutur. Bu həcm data tipindən asılı olaraq dəyişə bilər. Nümunə olaraq nvarchar tipində hər simvol 2 bayt yer tutur.
JSON ilə işlədilən funksiyalar
1.isjson – məlumatın json tipində olub olmadığını yoxlayır. Aşağıdakı nümunəyə baxaq:
4 dəyişən elan edək:
declare @json1 varchar(max)=N'{“test”:1}’
declare @json2 varchar(max)=N'{“test”:1:1}’
declare @json3 varchar(max)=N’1′
declare @json4 varchar(max)=null
və sorğumuzu işlədək.
select
isjson(@json1) as json1,
isjson(@json2) as json2,
isjson(@json3) as json3,
isjson(@json4) as json4
Gördüyünüz kimi True, False və NULL qaytarır cavablarda.
2. jsonvalue – json məlumatda hər hansı bir dəyəri çəkmək üçün istifadə olunur.
Json dəyərin başlanğıcında $ simvolu durur.daha sonra ‘.’ hansı dəyərə müraciət edirsən onu yazırsan. Massivə müraciət və s. haqqında aşağıdakı nümunəyə baxaq.
declare @json varchar(max)=
‘{
“info”:{
“specialization”:”computer science”,
“course_number”:1,
“address”:{
“town”:”Moscow”,
“region”:”Moscow”,
“country”:”Russia”
},
“parents”:[“Anna”,”Peter”]
},
“type”:”student”
}’
select json_value(@json,’$.info.specialization’) as [specialization],
json_value(@json,’$.info.”course number”‘) as [course number],
json_value(@json,’$.info.address.town’) as [town],
json_value(@json,’$.info.parents[0]’) as [mother],
json_value(@json,’$.info.parents[1]’) as [father]
Nəticə aşağıdakı kimi olur.
3.openjson – Bütün hallara baxmaq üçün jsonu dəyişək. Json tipinə aşağıdakı sorğunu verməklə cədvəl şəkilində çıxardır.
DECLARE @json NVARCHAR(4000) = N'{
“StringValue”:”John”,
“IntValue”:45,
“TrueValue”:true,
“FalseValue”:false,
“NullValue”:null,
“ArrayValue”:[“a”,”r”,”r”,”a”,”y”],
“ObjectValue”:{“obj”:”ect”}
}’
SELECT *
FROM OPENJSON(@json)
Bizə aşağıdakı şəkildə nəticə qayıdır:
Nəticədən gördüyümüz kimi 3 sütün nəticə qayıdır: key,value və type. Key value ilə yuxarıda tanış olduq. type isə dəyərin hansı data type-da olmağını göstərir.
Json tipində məlumatı Openjson-un əlavə funksionallıqlarından biri olan with istifadə etməklə daha detallı və istədiyimiz şəkildə çıxartmaq mümkündür. Aşağıdakı nümunəyə baxaq.
SELECT *
FROM OPENJSON(@json) with (
string_value varchar(50) ‘$.”StringValue”‘,
int_value tinyint ‘$.”IntValue”‘,
boolean_value bit ‘$.”TrueValue”‘,
boolean_value bit ‘$.”FalseValue”‘,
Null_value varchar(50) ‘$.”NullValue”‘,
Array_value varchar(50) ‘$.”ArrayValue”[0]’,
Object_value varchar(50) ‘$.”ObjectValue”.”obj”‘ )
Sorğudan geri qayıdan nəticəyə baxaq:
4.Json_modify Json-dakı dəyərlərin dəyişdirilərək sorğuda geri qaytarılması üçündür. Burda həm key-i həm də value-ni dəyişdirmək mümkündür. Gəlin aşağıdakı bir nümunəyə baxaq.
declare @json varchar(max)=
‘{
“first name”:”Natiq”,
“last name”:”Rzazade”,
“age”:25,
“skills”:
[“SQL Server 2014”,“T-SQL”,
“JSON”
]
}’
a) set @json=JSON_MODIFY(@json,’lax$.yash’,JSON_VALUE(@json,’$.age’)+3); həm ad dəyişir həm dəyər
b) set @json=JSON_MODIFY(@json,’lax$.age’,JSON_VALUE(@json,’$.age’)/5); yalnız dəyəri dəyişir.
c) set @json=JSON_MODIFY(@json,’lax$.vetendash’,JSON_VALUE(@json,’$.”first name”‘)+’ ‘+JSON_VALUE(@json,’$.”last name”‘));
d) set @json=JSON_MODIFY(@json,’$.skills[0]’,’SQL Server 2016′);
e) set @json=JSON_MODIFY(@json,’append strict$.skills’,’In Memory OLTP’)
select * from openjson(@json);
İndi də sql sorğu dilindən məlumatın json tipinə çevrilməsinə baxaq.
Bir cədvəl yaradaq və ona məlumat daxil edək.
create table dbo.test_table(id int not null,name varchar(100) null,dt date null);
insert into dbo.test_table(id,name,dt)
values (1,’Sahil’,’2017-04-01′),
(2,’Aftandil’,null),
(3,null,’2017-01-01′);
Daha sonra o məlumatları Json formatında çıxartmaq üçün aşağıdakı sorğunu icra etmək lazımdır.
select * from test_table for json auto
Aşağıdakı nəticəni alacağıq:
[{“id”:1,”name”:”Sahil”,”dt”:”2017-04-01″},{“id”:2,”name”:”Aftandil”},
{“id”:3,”dt”:”2017-01-01″}]
Gördüyünüz kimi NULL data-lar Json tipinə keçdikdə itir. Bunun itməməsi üçün aşağıdakı skripti işlətmək lazımdır.
select * from test_table for json auto, include_null_values
[{“id”:1,”name”:”Sahil”,”dt”:”2017-04-01″},
{“id”:2,”name”:”Aftandil”,”dt”:null},
{“id”:3,”name”:null,”dt”:”2017-01-01″}]
Qayıdan cavaba diqqətlə fikir versək görərik ki massivin key value-suna heç bir ad verilməyib əgər key value-yə hər hansı bir ad vermək istəyiriksə aşağıdakı skripti işlətməliyik.
select * from test_table for json auto,include_null_values,root(‘root’)
Nəticə:
{“root”:[{“id”:1,”name”:”Sahil”,”dt”:”2017-04-01″},
{“id”:2,”name”:”Aftandil”,”dt”:null},
{“id”:3,”name”:null,”dt”:”2017-01-01″}]}
SQL Server 2016-da Json – un tətbiqi bununla bitmir. Əgər çatdıra bilsəm 2ci hissə də yazacam. Hal – hazırda JSON haqda bu qədər. Ümidvaram bir faydası toxunar.
Müəllif : Natiq Rzazadə
0 Comments