JSON (J avaS skrypt O obiekt N otation) jest bardzo popularnym standardem wymiany danych specjalnie w REST API. Prawie wszystkie nowoczesne strony internetowe, aplikacje na Androida lub iOS używają tego do wymiany danych z serwerem. Począwszy od SQL Server 2016, Microsoft rozszerza wsparcie dla JSON poprzez kilka wbudowanych funkcji. W ten sposób SQL Server obsługuje funkcje NOSQL w tradycyjnych relacyjnych bazach danych. Zbadajmy to:
- ISJSON – sprawdza ciąg znaków, czy jest to prawidłowy JSON, czy nie
- JSON_VALUE – pobiera wartość z ciągu JSON
- JSON_QUERY – pobiera obiekt lub tablicę z ciągu JSON
- JSON_MODIFY – zwraca zaktualizowany ciąg JSON
- OPENJSON – analizuje tekst JSON i zwraca obiekty i właściwości z danych wejściowych JSON jako wiersze i kolumny
- FOR JSON Clause – eksportuje dane SQL do formatu JSON
Funkcja 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);
Wyjście
1 -- 1 if it is a valid JSON otherwise 0
Funkcja JSON_VALUE
Ta funkcja służy do pobierania wartości skalarnej z ciągu JSON. Jego składnia to
JSON_VALUE(expression, path)
wyrażenie to nazwa zmiennej lub kolumny, która zawiera tekst JSON i jest właściwością do wyodrębnienia. Na przykład uruchomienie poniższej instrukcji na powyższym ciągu JSON przyniesie poniższe dane wyjściowe:
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
Wyjście
5548-0246-6336-5664
Funkcja JSON_VALUE zwraca pojedynczą wartość tekstową typu nvarchar(4000) . Zwraca null jeśli określona ścieżka nie zostanie znaleziona w obiekcie JSON lub wartość wykracza poza nvarchar(4000). Używanie „ściśle Słowo kluczowe przed ścieżką spowoduje błąd, jeśli określona ścieżka nie jest dostępna w obiekcie JSON.
Funkcja JSON_QUERY
Funkcja JSON_QUERY(wyrażenie [,ścieżka]) jako argumenty przyjmuje nazwę zmiennej lub kolumny zawierającej tekst JSON oraz ścieżkę JSON określającą obiekt lub tablicę do wyodrębnienia.
Wyjście
Zwraca fragment JSON typu nvarchar(max) . Podobnie jak funkcja JSON_VALUE zwraca wartość null, jeśli określona wartość nie jest obiektem ani tablicą. Użycie słowa kluczowego „strict” spowoduje wyświetlenie błędu.
Funkcja JSON_MODIFY
Aktualizuje wartość właściwości w ciągu JSON i zwraca zaktualizowany ciąg JSON. Jako argumenty przyjmuje wyrażenie, ścieżkę i nowy. Korzystając z tej funkcji, możemy wykonać poniższą operację na ciągu JSON:
- Aktualizacja
- Wstaw
- Usuń
- Dołącz
1. Zaktualizuj
Aktualizuje wartość podanej ścieżki.
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
Wyjście
2. Wstaw
Nowa wartość jest dodawana w ciągu JSON, jeśli atrybut w podanej ścieżce nie istnieje. W przeciwnym razie zaktualizuje istniejącą wartość zgodnie z powyższym przykładem. Nowy atrybut jest dodawany na końcu JSON.
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
Wyjście
3. Usuń
Umieszczenie wartości NULL w ścieżce po prostu ją usunie.
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
Wyjście
4. Dołącz
Nowy element można dołączyć w tablicy jak poniżej:
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
Wyjście
Funkcja OPENJSON
Jest to funkcja z wartościami przechowywanymi w tabeli, która analizuje tekst JSON i zwraca obiekty i właściwości z danych wejściowych JSON jako wiersze i kolumny.
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 )
Wyjście
DLA klauzuli JSON
Ta klauzula jest powszechnie stosowana w TSQL do eksportowania danych tabeli SQL do formatu JSON. Ma dwa warianty:
- AUTO – Domyślne wyjście JSON jest generowane przy użyciu opcji AUTO.
- PATH – Struktura JSON może być modyfikowana przez nazwę kolumny lub aliasy za pomocą opcji 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
Wyjście
Wniosek
To wszystko o JSON w SQL Server. Miłego TSQLingu!
Ten artykuł pochodzi z mojego bloga.