JSON (J avaS skrift O bject N otation) er meget populær standard til udveksling af data specielt i REST API. Næsten alle moderne hjemmesider, android eller iOS app bruger dette til at udveksle data med server. Fra SQL Server 2016 udvider Microsoft sin support til JSON gennem et par indbyggede funktioner. På denne måde understøtter SQL Server NOSQL-funktioner i traditionelle relationsdatabaser. Lad os undersøge det:
- ISJSON – undersøger en streng, om det er en gyldig JSON eller ej
- JSON_VALUE – henter værdi fra en JSON-streng
- JSON_QUERY – henter objekt eller array fra en JSON-streng
- JSON_MODIFY – returnerer den opdaterede JSON-streng
- OPENJSON – analyserer JSON-tekst og returnerer objekter og egenskaber fra JSON-inputtet som rækker og kolonner
- FOR JSON-klausul – eksporterer SQL-data til JSON-format
ISJSON-funktion
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);
Output
1 -- 1 if it is a valid JSON otherwise 0
JSON_VALUE-funktion
Denne funktion bruges til at hente en skalarværdi fra en JSON-streng. Dets syntaks er
JSON_VALUE(expression, path)
udtryk er navnet på en variabel eller en kolonne, der indeholder JSON-tekst og er den egenskab, der skal udtrækkes. For eksempel vil kørsel af nedenstående sætning på ovenstående JSON-streng give under output :
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
Output
5548-0246-6336-5664
Funktionen JSON_VALUE returnerer en enkelt tekstværdi af typen nvarchar(4000) . Det returnerer null hvis den angivne sti ikke findes i JSON-objektet eller værdien er over nvarchar(4000). Brug af ‘strict ' søgeord før stien vil kaste fejlen, hvis den angivne sti ikke er tilgængelig i JSON-objektet.
JSON_QUERY-funktion
Den Funktionen JSON_QUERY(udtryk [,sti]) tager navnet på en variabel eller en kolonne, der indeholder JSON-tekst, og JSON-stien, der specificerer objektet eller arrayet, der skal udtrækkes, som dets argumenter.
Output
Det returnerer et JSON-fragment af typen nvarchar(max) . Ligesom JSON_VALUE returnerer funktionen null, hvis den angivne værdi ikke er et objekt eller en matrix. Brug af 'strengt' søgeord vil give fejlen.
JSON_MODIFY-funktion
Det opdaterer værdien af en egenskab i en JSON-streng og returnerer den opdaterede JSON-streng. Det tager udtryk, vej og nyt som argumenter. Ved at bruge denne funktion kan vi udføre handlingen nedenfor på en JSON-streng:
- Opdater
- Indsæt
- Slet
- Tilføj
1. Opdater
Opdaterer værdien af en given sti.
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
Output
2. Indsæt
Ny værdi tilføjes i JSON-strengen, hvis attributten i den angivne sti ikke eksisterer. Ellers vil den opdatere den eksisterende værdi som i ovenstående eksempel. Den nye attribut tilføjes i slutningen af JSON.
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
Output
3. Slet
Hvis du sætter NULL-værdien i stien, fjernes den bare.
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
Output
4. Tilføj
Nyt element kan tilføjes i array som nedenfor:
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
Output
OPENJSON-funktion
Dette er en funktion med tabelværdi, der analyserer JSON-tekst og returnerer objekter og egenskaber fra JSON-inputtet som rækker og kolonner.
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 )
Output
FOR JSON-klausul
Denne klausul er meget brugt med TSQL til eksport af SQL-tabeldata til JSON-format. Den har to varianter:
- AUTO – Standard JSON-output genereres ved hjælp af AUTO-indstillingen.
- PATH – Strukturen af JSON kan ændres af kolonnenavnet eller aliasserne ved at bruge PATH-indstillingen
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
Output
Konklusion
Det hele handler om JSON i SQL Server. Glad TSQLing!
Denne artikel er taget fra min blog.