Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

JSON in SQL Server

JSON (J avaS Krippe O Objekt N otation) ist ein sehr beliebter Standard für den Datenaustausch speziell in der REST-API. Fast alle modernen Websites, Android- oder iOS-Apps verwenden dies für den Datenaustausch mit dem Server. Ab SQL Server 2016 erweitert Microsoft seine Unterstützung für JSON durch einige integrierte Funktionen. Auf diese Weise unterstützt SQL Server NOSQL-Funktionen in traditionellen relationalen Datenbanken. Untersuchen wir es:

  • ISJSON – untersucht einen String, ob es sich um ein gültiges JSON handelt oder nicht
  • JSON_VALUE – ruft den Wert aus einer JSON-Zeichenfolge ab
  • JSON_QUERY – holt Objekt oder Array aus einem JSON-String
  • JSON_MODIFY – gibt den aktualisierten JSON-String zurück
  • OPENJSON – parst JSON-Text und gibt Objekte und Eigenschaften aus der JSON-Eingabe als Zeilen und Spalten zurück
  • FOR JSON-Klausel – exportiert SQL-Daten in das JSON-Format

ISJSON-Funktion

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

Ausgabe

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

JSON_VALUE-Funktion

Diese Funktion wird verwendet, um einen Skalarwert aus einer JSON-Zeichenfolge abzurufen. Seine Syntax ist

JSON_VALUE(expression, path)

Ausdruck ist der Name einer Variablen oder einer Spalte, die JSON-Text enthält und die zu extrahierende Eigenschaft ist. Wenn Sie beispielsweise die folgende Anweisung für die obige JSON-Zeichenfolge ausführen, erhalten Sie die folgende Ausgabe:

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

Ausgabe

5548-0246-6336-5664

Die Funktion JSON_VALUE gibt einen einzelnen Textwert vom Typ nvarchar(4000) zurück. Es gibt null zurück wenn der angegebene Pfad nicht im JSON-Objekt gefunden wird oder der Wert über nvarchar(4000) liegt. Verwenden von ‘streng Das Schlüsselwort vor dem Pfad löst den Fehler aus, wenn der angegebene Pfad im JSON-Objekt nicht verfügbar ist.

JSON_QUERY-Funktion

Die Die Funktion JSON_QUERY(expression [,path]) nimmt den Namen einer Variablen oder einer Spalte, die JSON-Text enthält, und den JSON-Pfad, der das zu extrahierende Objekt oder Array angibt, als Argumente.

Ausgabe

Es gibt ein JSON-Fragment vom Typ nvarchar(max) zurück . Wie die JSON_VALUE-Funktion gibt null zurück, wenn der angegebene Wert kein Objekt oder Array ist. Die Verwendung des Schlüsselworts „strict“ löst den Fehler aus.

JSON_MODIFY-Funktion

Es aktualisiert den Wert einer Eigenschaft in einer JSON-Zeichenfolge und gibt die aktualisierte JSON-Zeichenfolge zurück. Als Argumente werden expression, path und new verwendet. Mit dieser Funktion können wir die folgenden Operationen mit einer JSON-Zeichenfolge ausführen:

  1. Aktualisieren
  2. Einfügen
  3. Löschen
  4. Anhängen
1. Aktualisieren

Aktualisiert den Wert eines angegebenen Pfads.

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

Ausgabe

2. Einfügen

Der JSON-Zeichenfolge wird ein neuer Wert hinzugefügt, wenn das Attribut im angegebenen Pfad nicht vorhanden ist. Andernfalls wird der vorhandene Wert wie im obigen Beispiel aktualisiert. Das neue Attribut wird am Ende des JSON hinzugefügt.

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

Ausgabe

3. Löschen

Wenn Sie den NULL-Wert in den Pfad einfügen, wird er einfach entfernt.

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

Ausgabe

4. Anhängen

Ein neues Element kann wie folgt im Array angehängt werden:

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

Ausgabe

OPENJSON-Funktion

Dies ist eine Tabellenwertfunktion, die JSON-Text analysiert und Objekte und Eigenschaften aus der JSON-Eingabe als Zeilen und Spalten zurückgibt.

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
)

Ausgabe

FOR JSON-Klausel

Diese Klausel wird häufig mit TSQL zum Exportieren von SQL-Tabellendaten in das JSON-Format verwendet. Es gibt zwei Varianten:

  • AUTO – Die Standard-JSON-Ausgabe wird mit der AUTO-Option generiert.
  • PATH – Die Struktur von JSON kann durch den Spaltennamen oder Aliase mit der Option PATH geändert werden
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

Ausgabe

Schlussfolgerung

Hier dreht sich alles um JSON in SQL Server. Viel Spaß beim TSQLing!

Dieser Artikel stammt aus meinem Blog.