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:
- Aktualizovat
- Vložit
- Smazat
- 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.