Lang Azərbaycan
Ehim

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.

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=

computer science

1

Moscow

Moscow

”Russia”

Anna

Peter

Student

’;

 

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

Şəkil 1

 

 

 

 

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

Şəkil 2

 

 

 

 

 

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.

Şəkil 3

 

 

 

 

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:

Şəkil 4

 

 

 

 

 

 

 

 

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:

Şəkil 5

 

 

 

 

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);

Şəkil 6

 

 

 

 

 

İ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