Condividi tramite


Espressioni di percorso JSON nel motore di database SQL

Si applica a: SQL Server 2016 (13.x) e versioni successive Azure SQL DatabaseAzure SQL Managed InstanceAzure 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.

  1. Modalità facoltativa percorso, con un valore pari a lax o strict.

  2. Percorso stesso.

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 lax modalità, 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 una name chiave, la funzione restituisce Null, ma non genera un errore.

  • In strict modalità, 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, $.name e $."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 di people.

    • 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: