JSON (J avaS skript O bject N otation) är en mycket populär standard för utbyte av data speciellt i REST API. Nästan alla moderna webbplatser, android eller iOS appar använder detta för att utbyta data med server. Från SQL Server 2016 utökar Microsoft sitt stöd för JSON genom ett par inbyggda funktioner. På så sätt stöder SQL Server NOSQL-funktioner i traditionella relationsdatabaser. Låt oss undersöka det:
- ISJSON – undersöker en sträng om det är en giltig JSON eller inte
- JSON_VALUE – hämtar värde från en JSON-sträng
- JSON_QUERY – hämtar objekt eller array från en JSON-sträng
- JSON_MODIFY – returnerar den uppdaterade JSON-strängen
- OPENJSON – analyserar JSON-text och returnerar objekt och egenskaper från JSON-indata som rader och kolumner
- FÖR JSON-klausul – exporterar SQL-data till 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);
Utdata
1 -- 1 if it is a valid JSON otherwise 0
JSON_VALUE-funktion
Denna funktion används för att hämta ett skalärt värde från en JSON-sträng. Syntaxen är
JSON_VALUE(expression, path)
uttryck är namnet på en variabel eller en kolumn som innehåller JSON-text och är egenskapen att extrahera. Om du till exempel kör satsen nedan på JSON-strängen ovan kommer att ge under output :
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
Utdata
5548-0246-6336-5664
Funktionen JSON_VALUE returnerar ett enda textvärde av typen nvarchar(4000) . Den returnerar null om den specificerade sökvägen inte hittas i JSON-objektet eller om värdet överstiger nvarchar(4000). Använder ‘strict ' nyckelord före sökvägen kommer att ge felet om angiven sökväg inte är tillgänglig i JSON-objektet.
JSON_QUERY-funktion
Den JSON_QUERY(uttryck [,sökväg])-funktionen tar namnet på en variabel eller en kolumn som innehåller JSON-text och JSON-sökvägen som anger objektet eller arrayen som ska extraheras som dess argument.
Utdata
Den returnerar ett JSON-fragment av typen nvarchar(max) . Liksom JSON_VALUE returnerar funktionen null om det angivna värdet inte är ett objekt eller en matris. Om du använder 'strikt' sökord kommer felet att uppstå.
JSON_MODIFY-funktion
Den uppdaterar värdet på en egenskap i en JSON-sträng och returnerar den uppdaterade JSON-strängen. Det tar uttryck, väg och nytt som argument. Med den här funktionen kan vi utföra operationen nedan på en JSON-sträng:
- Uppdatera
- Infoga
- Ta bort
- Lägg till
1. Uppdatera
Uppdaterar värdet för en given sökväg.
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
Utdata
2. Infoga
Nytt värde läggs till i JSON-strängen om attributet i den angivna sökvägen inte finns. Annars kommer det att uppdatera det befintliga värdet enligt ovanstående exempel. Det nya attributet läggs till i slutet av JSON.
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
Utdata
3. Ta bort
Om du lägger in NULL-värdet i sökvägen tas det bara bort.
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
Utdata
4. Lägg till
Nytt element kan läggas till i array som nedan:
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
Utdata
OPENJSON-funktion
Detta är en tabellvärderad funktion som analyserar JSON-text och returnerar objekt och egenskaper från JSON-indata som rader och kolumner.
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 )
Utdata
FÖR JSON-klausul
Den här klausulen används ofta med TSQL för att exportera SQL-tabelldata till JSON-format. Den har två varianter:
- AUTO – Standard JSON-utgång genereras med alternativet AUTO.
- PATH – JSON-strukturen kan modifieras av kolumnnamnet eller alias med PATH-alternativet
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
Utdata
Slutsats
Det här handlar om JSON i SQL Server. Glad TSQLing!
Den här artikeln är hämtad från min blogg.