Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2016 (13.x) e versioni
successive Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (solo serverless SQL pool)
SQL database in Microsoft Fabric
Usare le espressioni di percorso JSON per fare riferimento alle proprietà degli oggetti JSON.
È necessario specificare un'espressione di percorso quando si chiamano le funzioni seguenti.
- Quando si chiama OPENJSON per creare una visualizzazione relazionale dei dati JSON.
- Quando si chiama JSON_VALUE per estrarre un valore dal testo JSON.
- Quando si chiama JSON_QUERY per estrarre un oggetto JSON o una matrice.
- Quando si chiama JSON_MODIFY per aggiornare il valore di una proprietà in una stringa JSON.
Parti di un'espressione di percorso
Un'espressione di percorso include due componenti.
Modalità facoltativa percorso, con un valore pari a
laxostrict.
Modalità di percorso
All'inizio dell'espressione di percorso dichiarare facoltativamente la modalità percorso specificando la parola chiave lax o strict. Il valore predefinito è lax.
In
laxmodalità, la funzione restituisce valori vuoti se l'espressione di percorso contiene un errore. Ad esempio, se si richiede il valore$.namee il testo JSON non contiene unanamechiave, la funzione restituisce Null, ma non genera un errore.In
strictmodalità, la funzione genera un errore se l'espressione di percorso contiene un errore.
La query seguente specifica in modo esplicito la modalità lax nell'espressione di percorso.
DECLARE @json AS NVARCHAR (MAX);
SET @json = N'{ ... }';
SELECT *
FROM OPENJSON (@json, N'lax $.info');
Path
Dopo la dichiarazione facoltativa della modalità percorso, specificare il percorso stesso.
Il segno di dollaro (
$) rappresenta l'elemento contesto.Il percorso proprietà è un insieme di passaggi di percorso. I passaggi di percorso possono contenere gli elementi e gli operatori seguenti.
Nomi delle chiavi. Ad esempio,
$.namee$."first name". Se il nome della chiave inizia con un segno di dollaro o contiene caratteri speciali quali spazi o punti (.), racchiuderlo tra virgolette.Elementi matrice. Ad esempio:
$.product[3]. Le matrici sono in base zero.L'operatore punto (
.) indica un membro di un oggetto. Ad esempio, in$.people[1].surnamesurnameè figlio dipeople.Le ricerche con caratteri jolly e intervalli di matrici sono supportate anche se l'input è un valore di tipo JSON.
Supporto dei caratteri jolly e dell'intervallo di matrici
Note
Il supporto per i caratteri jolly e gli intervalli di array è attualmente in anteprima e disponibile solo in SQL Server 2025 (17.x).
SQL Server 2025 (17.x) espande l'espressione di percorso ANSI SQL/JSON per supportare un carattere jolly per array. Il wildcard Array consente di specificare tutti gli elementi, intervalli di elementi, un elenco di elementi o il token speciale "last" per indicare l'ultimo valore in un array JSON. Le matrici SQL/JSON usano un indice in base zero. Il percorso SQL/JSON con caratteri jolly può essere usato in JSON_QUERY, JSON_PATH_EXISTS e JSON_CONTAINS.
Mentre JSON_VALUE la funzione supporta l'espressione di percorso SQL/JSON, il valore restituito di una JSON_VALUE funzione è uno scalare SQL e quindi la funzione restituisce NULL sempre per qualsiasi percorso SQL/JSON che punta a un oggetto o a una matrice JSON. I caratteri jolly degli array sono supportati solo se l'input è di tipo json.
La sintassi seguente illustra come usare il carattere jolly, l'intervallo e il token last speciale:
path[elements ]
elements ::= {
*
| number
| number to number
| last
| {number...[, number] }
}
Il token last speciale può essere usato al posto del valore numerico. Se viene specificato un intervallo, è necessario specificare l'intervallo in ordine crescente.
Esempi di espressioni di percorso SQL/JSON valide:
| Path | Description |
|---|---|
$[*] |
Tutti gli elementi |
$[0] |
Primo elemento |
$[0 to 2] |
Primi tre elementi |
$[last] |
Ultimo elemento |
$[last, 0] |
Invalid |
$[last, 2, 0, last] |
Invalid |
$.creditcards[0].type |
Restituisce il valore della proprietà type del primo elemento nella creditcards matrice |
$.credit_cards[*].type |
Restituisce il valore della proprietà type di tutti gli elementi nella creditcards matrice |
$.credit_cards[0, 2].type |
Restituisce il valore della proprietà type del primo e del terzo elemento nella creditcards matrice |
$.credit_cards[1 to 3].type |
Restituisce il valore della proprietà type dal secondo al quarto elemento nella creditcards matrice |
$.credit_cards[last].type |
Restituisce il valore della proprietà type dell'ultimo elemento nella creditcards matrice |
$.credit_cards[last, 0].type |
Restituisce il valore della proprietà type dell'ultimo e del primo elemento nella creditcards matrice |
Examples
Gli esempi inclusi in questa sezione fanno riferimento al testo JSON seguente.
{
"people": [{
"name": "John",
"surname": "Doe"
}, {
"name": "Jane",
"surname": null,
"active": true
}]
}
La tabella seguente illustra alcuni esempi di espressioni di percorso.
| Espressione di percorso | Value |
|---|---|
$.people[0].name |
John |
$.people[1] |
{ "name": "Jane", "surname": null, "active": true } |
$.people[1].surname |
NULL |
$ |
{ "people": [ { "name": "John", "surname": "Doe" },{ "name": "Jane", "surname": null, "active": true } ] } |
$.people[last].name |
["Jane"] |
$.people[0 to 1].name |
["John","Jane"] |
$.people[0, 1].name |
["John","Jane"] |
Modalità di gestione dei percorsi duplicati da parte delle funzioni predefinite
Se il testo JSON contiene proprietà duplicate, ad esempio due chiavi con lo stesso nome nello stesso livello, le JSON_VALUE funzioni e JSON_QUERY restituiscono solo il primo valore corrispondente al percorso. Per analizzare un oggetto JSON contenente chiavi duplicate e restituire tutti i valori, usare OPENJSON, come illustrato nell'esempio seguente.
DECLARE @json AS NVARCHAR (MAX);
SET @json = N'{"person":{"info":{"name":"John", "name":"Jack"}}}';
SELECT value
FROM OPENJSON (@json, '$.person.info');
Altre informazioni su JSON
Per un'introduzione visiva al supporto JSON predefinito, vedere il video seguente:
- JSON as a bridge between NoSQL and relational worlds (JSON come ponte tra NoSQL e gli ambienti relazionali)