sql >> Database teknologi >  >> RDS >> Sqlserver

JSON i SQL Server

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:

  1. Opdater
  2. Indsæt
  3. Slet
  4. 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.


  1. 11 måder at finde dublerede rækker, der har en primær nøgle i Oracle

  2. Sådan rangeres rækker i en partition i SQL

  3. Er der nogen, der ved, hvilken krypteringsteknik JDeveloper/SQL Developer bruger til at bevare legitimationsoplysninger?

  4. newid() inde i sql-serverfunktionen