JSON_VALUE (Transact-SQL)
Si applica a: SQL Server 2016 (13.x) e versioni successive Azure SQL DatabaseIstanza gestita di SQL di AzureAzure Synapse Analytics
Estrae un valore scalare da una stringa JSON.
Per estrarre un oggetto o una matrice da una stringa JSON anziché da un valore scalare, vedere JSON_QUERY (Transact-SQL). Per informazioni sulle differenze tra JSON_VALUE e JSON_QUERY, vedere Confronto tra JSON_VALUE e JSON_QUERY.
Convenzioni della sintassi Transact-SQL
Sintassi
JSON_VALUE ( expression , path )
Argomenti
expression
Espressione. In genere il nome di una variabile o di una colonna che contiene testo JSON.
Se JSON_VALUE individua JSON non valido in expression prima di trovare il valore identificato da path, la funzione restituisce un errore. Se JSON_VALUE non trova il valore identificato da path, analizza l'intero testo e restituisce un errore se rileva JSON non valido in un punto qualsiasi di expression.
path
Percorso JSON che specifica la proprietà da estrarre. Per altre informazioni, vedere Espressioni di percorso JSON (SQL Server).
In SQL Server 2017 (14.x) e nel database SQL di Azure è possibile fornire una variabile come valore di path.
Se il formato di path non è valido, JSON_VALUE restituisce un errore.
Valore restituito
Restituisce un valore di testo singolo di tipo nvarchar (4000). Le regole di confronto del valore restituito sono le stesse di quelle dell'espressione di input.
Se il valore è maggiore di 4000 caratteri:
In modalità lax JSON_VALUE restituisce Null.
In modalità strict JSON_VALUE restituisce un errore.
Se è necessario restituire valori scalari maggiori di 4000 caratteri, usare OPENJSON anziché JSON_VALUE. Per altre informazioni, vedere OPENJSON (Transact-SQL).
Osservazioni
Modalità lax e modalità strict
Si consideri il testo JSON seguente:
DECLARE @jsonInfo NVARCHAR(MAX)
SET @jsonInfo=N'{
"info":{
"type":1,
"address":{
"town":"Bristol",
"county":"Avon",
"country":"England"
},
"tags":["Sport", "Water polo"]
},
"type":"Basic"
}'
Nella tabella seguente viene confrontato il comportamento di JSON_VALUE in modalità lax e in modalità strict. Per altre informazioni sulla specifica facoltativa della modalità del percorso (lax o strict), vedere Espressioni di percorso JSON (SQL Server).
Path | Valore restituito in modalità lax | Valore restituito in modalità strict | Altre informazioni |
---|---|---|---|
$ | NULL | Errore | Non è un valore scalare. Usare JSON_QUERY. |
$.info.type | N'1' | N'1' | N/a |
$.info.address.town | N'Bristol' | N'Bristol' | N/a |
$.info."address" | NULL | Errore | Non è un valore scalare. Usare JSON_QUERY. |
$.info.tags | NULL | Errore | Non è un valore scalare. Usare JSON_QUERY. |
$.info.type[0] | NULL | Errore | Non è una matrice. |
$.info.none | NULL | Errore | La proprietà non esiste. |
Esempi
Esempio 1
L'esempio seguente usa i valori delle proprietà JSON town
e state
nei risultati della query. Poiché JSON_VALUE mantiene le regole di confronto dell'origine, l'ordinamento dei risultati dipende dalle regole di confronto della colonna jsonInfo
.
Nota
In questo esempio si presuppone che una tabella denominata Person.Person
contenga una colonna di testo JSON jsonInfo
e che questa colonna abbia la struttura illustrata in precedenza nella spiegazione della modalità lax e della modalità strict. Nel database di esempio AdventureWorks, la tabella Person
non contiene infatti una colonna jsonInfo
.
SELECT FirstName, LastName,
JSON_VALUE(jsonInfo,'$.info.address.town') AS Town
FROM Person.Person
WHERE JSON_VALUE(jsonInfo,'$.info.address.state') LIKE 'US%'
ORDER BY JSON_VALUE(jsonInfo,'$.info.address.town')
Esempio 2
Nell'esempio seguente viene estratto il valore della proprietà JSON town
in una variabile locale.
DECLARE @jsonInfo NVARCHAR(MAX)
DECLARE @town NVARCHAR(32)
SET @jsonInfo=N'{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}';
SET @town=JSON_VALUE(@jsonInfo,'$.info.address[0].town'); -- Paris
SET @town=JSON_VALUE(@jsonInfo,'$.info.address[1].town'); -- London
Esempio 3
Nell'esempio seguente vengono create le colonne calcolate in base ai valori delle proprietà JSON.
CREATE TABLE dbo.Store
(
StoreID INT IDENTITY(1,1) NOT NULL,
Address VARCHAR(500),
jsonContent NVARCHAR(4000),
Longitude AS JSON_VALUE(jsonContent, '$.address[0].longitude'),
Latitude AS JSON_VALUE(jsonContent, '$.address[0].latitude')
)
Vedi anche
Espressioni di percorso JSON (SQL Server)
Dati JSON (SQL Server)
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per