sql >> Database >  >> RDS >> Sqlserver

JSON in SQL Server

JSON (J avaS cript O bject N otation) is een zeer populaire standaard voor het uitwisselen van gegevens, speciaal in REST API. Vrijwel alle moderne websites, android of iOS app gebruiken dit voor het uitwisselen van data met server. Vanaf SQL Server 2016 breidt Microsoft zijn ondersteuning voor JSON uit via een aantal ingebouwde functies. Op deze manier ondersteunt SQL Server NOSQL-functies in traditionele relationele databases. Laten we het onderzoeken:

  • ISJSON – onderzoekt een string of het een geldige JSON is of niet
  • JSON_VALUE – haalt waarde op uit een JSON-tekenreeks
  • JSON_QUERY – haalt object of array op uit een JSON-string
  • JSON_MODIFY – retourneert de bijgewerkte JSON-tekenreeks
  • OPENJSON – parseert JSON-tekst en retourneert objecten en eigenschappen van de JSON-invoer als rijen en kolommen
  • VOOR JSON-clausule – exporteert SQL-gegevens naar JSON-indeling

ISJSON-functie

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

Uitvoer

1 -- 1 if it is a valid JSON otherwise 0

JSON_VALUE Functie

Deze functie wordt gebruikt om een ​​scalaire waarde op te halen uit een JSON-tekenreeks. De syntaxis is

JSON_VALUE(expression, path)

uitdrukking is de naam van een variabele of een kolom die JSON-tekst bevat en de eigenschap is die moet worden geëxtraheerd. Als u bijvoorbeeld de onderstaande instructie uitvoert op de bovenstaande JSON-tekenreeks, krijgt u onderstaande uitvoer:

SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')

Uitvoer

5548-0246-6336-5664

De functie JSON_VALUE retourneert een enkele tekstwaarde van het type nvarchar(4000) . Het retourneert null als het opgegeven pad niet wordt gevonden in het JSON-object of als de waarde hoger is dan nvarchar (4000). Met behulp van ‘strikt ' sleutelwoord voor het pad zal de fout genereren als het opgegeven pad niet beschikbaar is in het JSON-object.

JSON_QUERY Functie

De JSON_QUERY(expression [,path]) functie neemt de naam van een variabele of een kolom die JSON-tekst bevat en het JSON-pad dat het object of de array specificeert dat moet worden geëxtraheerd als zijn argumenten.

Uitvoer

Het retourneert een JSON-fragment van het type nvarchar(max) . Net als de JSON_VALUE-functie retourneert null als de opgegeven waarde geen object of array is. Het gebruik van een 'strikt' zoekwoord zal de fout veroorzaken.

JSON_MODIFY Functie

Het werkt de waarde van een eigenschap in een JSON-tekenreeks bij en retourneert de bijgewerkte JSON-tekenreeks. Het neemt expressie, pad en nieuw als argumenten. Met behulp van deze functie kunnen we onderstaande bewerking uitvoeren op een JSON-string:

  1. Bijwerken
  2. Invoegen
  3. Verwijderen
  4. Toevoegen
1. Bijwerken

Werkt de waarde van een bepaald pad bij.

SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')

Uitgang

2. Invoegen

Er wordt een nieuwe waarde toegevoegd in de JSON-tekenreeks als het kenmerk in het opgegeven pad niet bestaat. Anders wordt de bestaande waarde bijgewerkt volgens het bovenstaande voorbeeld. Het nieuwe attribuut wordt aan het einde van de JSON toegevoegd.

SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')

Uitgang

3. Verwijderen

Als u de NULL-waarde in het pad plaatst, wordt deze gewoon verwijderd.

SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)

Uitgang

4. Toevoegen

Nieuw element kan worden toegevoegd in een array zoals hieronder:

SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')

Uitgang

OPENJSON-functie

Dit is een functie met tabelwaarde die JSON-tekst parseert en objecten en eigenschappen van de JSON-invoer als rijen en kolommen retourneert.

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
)

Uitvoer

VOOR JSON-clausule

Deze clausule wordt veel gebruikt met TSQL voor het exporteren van SQL-tabelgegevens naar JSON-indeling. Het heeft twee varianten:

  • AUTO – Standaard JSON-uitvoer wordt gegenereerd met de AUTO-optie.
  • PATH - De structuur van JSON kan worden gewijzigd door de kolomnaam of aliassen met behulp van de PATH-optie
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

Uitvoer

Conclusie

Dit gaat allemaal over de JSON in SQL Server. Veel plezier met TSQLing!

Dit artikel is afkomstig van mijn blog.


  1. Ongeldige standaardwaarde voor 'dateAdded'

  2. Vind overlappende datumbereiken in PostgreSQL

  3. Hoe MySQL 8 op Windows te installeren

  4. Op SQL Server opgeslagen procedures van Oracle®