sql >> Databáze >  >> RDS >> Sqlserver

JSON v SQL Server

JSON (J avaS kript O bjekt N otation) je velmi oblíbený standard pro výměnu dat speciálně v REST API. Téměř všechny moderní weby, aplikace pro Android nebo iOS to používají pro výměnu dat se serverem. Od SQL Server 2016 společnost Microsoft rozšiřuje svou podporu pro JSON prostřednictvím několika vestavěných funkcí. Tímto způsobem SQL Server podporuje funkce NOSQL v tradičních relačních databázích. Pojďme to prozkoumat:

  • ISJSON – prověří řetězec, zda je platný JSON nebo ne
  • JSON_VALUE – načte hodnotu z řetězce JSON
  • JSON_QUERY – načte objekt nebo pole z řetězce JSON
  • JSON_MODIFY – vrátí aktualizovaný řetězec JSON
  • OPENJSON – analyzuje text JSON a vrací objekty a vlastnosti ze vstupu JSON jako řádky a sloupce
  • Klauzule FOR JSON – exportuje data SQL do formátu JSON

Funkce ISJSON

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

Výstup

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

Funkce JSON_VALUE

Tato funkce se používá k načtení skalární hodnoty z řetězce JSON. Jeho syntaxe je

JSON_VALUE(expression, path)

výraz je název proměnné nebo sloupce, který obsahuje text JSON a je to vlastnost k extrahování. Například spuštění níže uvedeného příkazu na výše uvedeném řetězci JSON poskytne výstup níže:

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

Výstup

5548-0246-6336-5664

Funkce JSON_VALUE vrací jednu textovou hodnotu typu nvarchar(4000) . Vrátí null pokud zadaná cesta není v objektu JSON nalezena nebo je hodnota za nvarchar(4000). Pomocí ‘přísného ‘ klíčové slovo před cestou vyvolá chybu, pokud zadaná cesta není k dispozici v objektu JSON.

Funkce JSON_QUERY

The Funkce JSON_QUERY(výraz [,cesta]) přebírá jako argumenty název proměnné nebo sloupce, který obsahuje text JSON, a cestu JSON, která určuje objekt nebo pole, které se má extrahovat.

Výstup

Vrací fragment JSON typu nvarchar(max) . Stejně jako funkce JSON_VALUE vrátí hodnotu null, pokud zadaná hodnota není objekt nebo pole. Při použití klíčového slova „přísné“ dojde k chybě.

Funkce JSON_MODIFY

Aktualizuje hodnotu vlastnosti v řetězci JSON a vrátí aktualizovaný řetězec JSON. Jako argumenty to bere výraz, cestu a nové. Pomocí této funkce můžeme provést níže uvedenou operaci s řetězcem JSON:

  1. Aktualizovat
  2. Vložit
  3. Smazat
  4. Připojit
1. Aktualizovat

Aktualizuje hodnotu dané cesty.

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

Výstup

2. Vložit

Pokud atribut v zadané cestě neexistuje, je do řetězce JSON přidána nová hodnota. V opačném případě aktualizuje stávající hodnotu podle výše uvedeného příkladu. Nový atribut je přidán na konec JSON.

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

Výstup

3. Smazat

Vložením hodnoty NULL do cesty ji pouze odstraníte.

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

Výstup

4. Připojit

Nový prvek lze přidat do pole, jak je uvedeno níže:

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

Výstup

Funkce OPENJSON

Toto je funkce s hodnotou tabulky, která analyzuje text JSON a vrací objekty a vlastnosti ze vstupu JSON jako řádky a sloupce.

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
)

Výstup

PRO klauzuli JSON

Tato klauzule je široce používána s TSQL pro export dat tabulky SQL do formátu JSON. Má dvě varianty:

  • AUTO – Výchozí výstup JSON je generován pomocí možnosti AUTO.
  • PATH – Strukturu JSON lze upravit podle názvu sloupce nebo aliasů pomocí možnosti PATH
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

Výstup

Závěr

To je vše o JSON v SQL Server. Šťastné TSQLing!

Tento článek je převzat z mého blogu.


  1. Syntaxe Oracle SQL:Uváděný identifikátor

  2. Připojení podle předchozího ekvivalentu pro MySQL

  3. Plně spravovaný hosting PostgreSQL na AWS a Azure se spouští včas pro starší migrace

  4. Tipy pro poskytování výkonu databáze MySQL – část druhá