JSON (J avaS script O oggetto N otation) è uno standard molto popolare per lo scambio di dati specialmente nell'API REST. Quasi tutti i siti Web moderni, le app Android o iOS lo utilizzano per lo scambio di dati con il server. Da SQL Server 2016, Microsoft estende il supporto per JSON tramite un paio di funzioni integrate. In questo modo SQL Server supporta le funzionalità NOSQL nei database relazionali tradizionali. Esaminiamolo:
- ISJSON:esamina una stringa indipendentemente dal fatto che sia un JSON valido o meno
- JSON_VALUE – recupera il valore da una stringa JSON
- JSON_QUERY – recupera l'oggetto o l'array da una stringa JSON
- JSON_MODIFY – restituisce la stringa JSON aggiornata
- OPENJSON – analizza il testo JSON e restituisce oggetti e proprietà dall'input JSON come righe e colonne
- Clausola FOR JSON:esporta i dati SQL in formato JSON
Funzione 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);
Risultato
1 -- 1 if it is a valid JSON otherwise 0
Funzione JSON_VALUE
Questa funzione viene utilizzata per recuperare un valore scalare da una stringa JSON. La sua sintassi è
JSON_VALUE(expression, path)
espressione è il nome di una variabile o di una colonna che contiene testo JSON ed è la proprietà da estrarre. Ad esempio, l'esecuzione dell'istruzione seguente sulla stringa JSON sopra restituirà l'output seguente:
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
Risultato
5548-0246-6336-5664
La funzione JSON_VALUE restituisce un singolo valore di testo di tipo nvarchar(4000) . Restituisce null se il percorso specificato non viene trovato nell'oggetto JSON o il valore è oltre nvarchar(4000). Utilizzando 'rigoroso ' prima che il percorso genererà l'errore se il percorso specificato non è disponibile nell'oggetto JSON.
Funzione JSON_QUERY
Il La funzione JSON_QUERY(espressione [,percorso]) prende il nome di una variabile o di una colonna che contiene testo JSON e il percorso JSON che specifica l'oggetto o l'array da estrarre come argomenti.
Risultato
Restituisce un frammento JSON di tipo nvarchar(max) . Come la funzione JSON_VALUE restituisce null se il valore specificato non è un oggetto o una matrice. L'utilizzo della parola chiave "rigorosa" genererà l'errore.
Funzione JSON_MODIFY
Aggiorna il valore di una proprietà in una stringa JSON e restituisce la stringa JSON aggiornata. Prende espressione, percorso e nuovo come argomenti. Usando questa funzione, possiamo eseguire le seguenti operazioni su una stringa JSON:
- Aggiorna
- Inserisci
- Elimina
- Aggiungi
1. Aggiorna
Aggiorna il valore di un determinato percorso.
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
Uscita
2. Inserisci
Il nuovo valore viene aggiunto nella stringa JSON se l'attributo nel percorso fornito non esiste. Altrimenti aggiornerà il valore esistente come nell'esempio sopra. Il nuovo attributo viene aggiunto alla fine del JSON.
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
Uscita
3. Elimina
L'inserimento del valore NULL nel percorso lo rimuoverà.
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
Uscita
4. Aggiungi
Il nuovo elemento può essere aggiunto nell'array come di seguito:
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
Uscita
Funzione OPENJSON
Questa è una funzione con valori di tabella che analizza il testo JSON e restituisce oggetti e proprietà dall'input JSON come righe e colonne.
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 )
Risultato
Clausola FOR JSON
Questa clausola è ampiamente utilizzata con TSQL per esportare i dati della tabella SQL in formato JSON. Ha due varianti:
- AUTO:l'output JSON predefinito viene generato utilizzando l'opzione AUTO.
- PATH – La struttura di JSON può essere modificata dal nome della colonna o dagli alias usando l'opzione 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
Risultato
Conclusione
Questo è tutto sul JSON in SQL Server. Buon TSQL!
Questo articolo è tratto dal mio blog.