JSON_QUERY (Transact-SQL)
Si applica a: SQL Server 2016 (13.x) e
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Endpoint di analisi SQL in Microsoft Fabric
Warehouse in Microsoft Fabric
Estrae un oggetto o una matrice da una stringa JSON.
Per estrarre un valore scalare da una stringa JSON anziché un oggetto o una matrice, vedere JSON_VALUE (Transact-SQL). Per informazioni sulle differenze tra JSON_VALUE e JSON_QUERY
, si veda Confronto tra JSON_VALUE e JSON_QUERY.
Convenzioni relative alla sintassi Transact-SQL
JSON_QUERY ( expression [ , path ] )
Espressione. In genere il nome di una variabile o di una colonna che contiene testo JSON.
Se JSON_QUERY
individua JSON non valido in expression prima di trovare il valore identificato da path, la funzione restituisce un errore. Se JSON_QUERY
Y 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.
Percorso JSON che specifica l'oggetto o la matrice da estrarre.
In SQL Server 2017 (14.x) e in Azure SQL Database è possibile fornire una variabile come valore del percorso.
Il percorso JSON può specificare la modalità lax o strict per l'analisi. Se non si specifica la modalità di analisi, la modalità predefinita è lax. Per altre informazioni, vedere Espressioni di percorso JSON (SQL Server).
Il valore predefinito per path è $
. Di conseguenza, se non si specifica un valore per path, JSON_QUERY
restituisce l'input expression.
Se il formato di path non è valido, JSON_QUERY
restituisce un errore.
Restituisce un frammento JSON di tipo nvarchar(max). Le regole di confronto del valore restituito sono le stesse di quelle dell'espressione di input.
Se il valore non è un oggetto o una matrice:
In modalità lax,
JSON_QUERY
restituisce null.In modalità strict,
JSON_QUERY
restituisce un errore.
Si consideri il testo JSON seguente:
{
"info": {
"type": 1,
"address": {
"town": "Cheltenham",
"county": "Gloucestershire",
"country": "England"
},
"tags": ["Sport", "Water polo"]
},
"type": "Basic"
}
Nella tabella seguente viene confrontato il comportamento di JSON_QUERY
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).
Percorso | Valore restituito in modalità lax | Valore restituito in modalità strict | Altre informazioni |
---|---|---|---|
$ |
Restituisce l'intero testo JSON. | Restituisce l'intero testo JSON. | N/a |
$.info.type |
NULL |
Error | Non è un oggetto o una matrice. Utilizzare invece JSON_VALUE . |
$.info.address.town |
NULL |
Error | Non è un oggetto o una matrice. Utilizzare invece JSON_VALUE . |
$.info."address" |
N'{ "town":"Cheltenham", "county":"Gloucestershire", "country":"England" }' |
N'{ "town":"Cheltenham", "county":"Gloucestershire", "country":"England" }' |
N/a |
$.info.tags |
N'[ "Sport", "Water polo"]' |
N'[ "Sport", "Water polo"]' |
N/a |
$.info.type[0] |
NULL |
Error | Non è una matrice. |
$.info.none |
NULL |
Error | La proprietà non esiste. |
JSON_QUERY
restituisce un frammento JSON valido. Di conseguenza, FOR JSON
non esegue l'escape dei caratteri speciali nel valore restituito JSON_QUERY
.
Se vengono restituiti risultati con FOR JSON e vengono inclusi dati che sono già in formato JSON, in una colonna o come risultato di un'espressione, eseguire il wrapping dei dati JSON con JSON_QUERY
senza il parametro path.
Nell'esempio seguente viene illustrato come restituire un frammento JSON da una colonna CustomFields
nei risultati della query.
SELECT PersonID,FullName,
JSON_QUERY(CustomFields,'$.OtherLanguages') AS Languages
FROM Application.People
Nell'esempio seguente viene illustrato come includere frammenti JSON nell'output della clausola FOR JSON.
SELECT StockItemID, StockItemName,
JSON_QUERY(Tags) as Tags,
JSON_QUERY(CONCAT('["',ValidFrom,'","',ValidTo,'"]')) ValidityPeriod
FROM Warehouse.StockItems
FOR JSON PATH