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 database SQL di Azure
Istanza gestita di SQL di Azure
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 dell'array. 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
Le espressioni di percorso ANSI SQL/JSON supportano un wildcard dell'array. Il carattere jolly dell'array consente di specificare tutti gli elementi, un intervallo di elementi, un elenco di elementi o il token speciale last per indicare l'ultimo valore in un array JSON. Gli array SQL/JSON utilizzano indici basati su zero. Puoi usare percorsi SQL/JSON con wildcard 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)