Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

JSON w SQL Server

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:

  1. Aktualizacja
  2. Wstaw
  3. Usuń
  4. 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:łączenie wielu wierszy w jeden wiersz

  2. Zwróć oryginalne ziarno kolumny tożsamości w SQL Server

  3. Dopasowywanie rozmyte SQL

  4. Statystyki użycia indeksu SQL Server

  5. HAS_DBACCESS() – Dowiedz się, czy użytkownik może uzyskać dostęp do bazy danych w SQL Server