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:
- Aktualisieren
- Einfügen
- Löschen
- 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.