sql >> Databasteknik >  >> RDS >> Sqlserver

JSON i SQL Server

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:

  1. Uppdatera
  2. Infoga
  3. Ta bort
  4. 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.


  1. Skillnaden mellan SYSDATE() och NOW() i MariaDB

  2. 60 miljoner poster, välj poster från en viss månad. Hur optimerar man databasen?

  3. Utmaningslösningar för nummerseriegenerator – del 5

  4. Hur redigerar man snabbt värden i tabell i SQL Server Management Studio?