Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : SQL Server 2016 (13.x) et versions ultérieures
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (pool SQL serverless uniquement)
Utilisez les expressions de chemins JSON pour référencer les propriétés des objets JSON.
Vous devez fournir une expression de chemin lorsque vous appelez les fonctions suivantes.
- Lorsque vous appelez OPENJSON pour créer une vue relationnelle des données JSON.
- Quand vous appelez JSON_VALUE pour extraire une valeur de texte JSON.
- Quand vous appelez JSON_QUERY pour extraire un tableau ou un objet JSON.
- Quand vous appelez JSON_MODIFY pour mettre à jour la valeur d’une propriété dans une chaîne JSON.
Parties d’une expression de chemin
Une expression de chemin comporte deux composants.
mode PATH
Au début de l’expression de chemin d’accès, déclarez éventuellement le mode chemin en spécifiant le mot clé lax
ou strict
. La valeur par défaut est lax
.
En
lax
mode, la fonction retourne des valeurs vides si l’expression de chemin d’accès contient une erreur. Par exemple, si vous demandez la valeur$.name
et que le texte JSON ne contient pas dename
clé, la fonction retourne null, mais ne génère pas d’erreur.En
strict
mode, la fonction génère une erreur si l’expression de chemin d’accès contient une erreur.
La requête suivante spécifie explicitement le mode lax
dans l’expression de chemin.
DECLARE @json AS NVARCHAR (MAX);
SET @json = N'{ ... }';
SELECT *
FROM OPENJSON (@json, N'lax $.info');
Chemin d’accès
Après la déclaration de mode de chemin facultatif, spécifiez le chemin lui-même.
Le signe dollar (
$
) représente l’élément de contexte.Le chemin de la propriété est un ensemble d’étapes de chemin. Les étapes de chemin peuvent contenir les éléments et les opérateurs suivants.
Noms de clés. Par exemple :
$.name
et$."first name"
. Si le nom de clé commence par un signe dollar ou contient des caractères spéciaux tels que des espaces ou des opérateurs point (.
), placez-le entre guillemets.Éléments du tableau. Par exemple :
$.product[3]
. Les tableaux sont de base zéro.L’opérateur point (
.
) indique un membre d’un objet. Par exemple, dans$.people[1].surname
,surname
est un enfant depeople
.Les recherches de caractères génériques et de plages de tableau sont également prises en charge si l’entrée est une valeur de type JSON.
Prise en charge des caractères génériques et des plages de tableaux
Remarque
La prise en charge des caractères génériques et des plages de tableaux est actuellement en préversion et disponible uniquement dans SQL Server 2025 (17.x) Preview.
SQL Server 2025 (17.x) Préversion développe l’expression de chemin d’accès ANSI SQL/JSON pour prendre en charge un caractère générique de tableau. Le caractère générique tableau vous permet de spécifier tous les éléments, plages d’éléments, liste d’éléments ou jeton spécial « last » pour indiquer la dernière valeur dans un tableau JSON. Les tableaux SQL/JSON utilisent un index de base zéro. Le chemin SQL/JSON avec des caractères génériques peut être utilisé dans JSON_QUERY, JSON_PATH_EXISTS et JSON_CONTAINS.
Bien que JSON_VALUE
la fonction prenne en charge l’expression de chemin d’accès SQL/JSON, la valeur de retour d’une JSON_VALUE
fonction est une scalaire SQL et, par conséquent, la fonction retourne NULL
toujours pour n’importe quel chemin SQL/JSON qui pointe vers un objet ou un tableau JSON. Les caractères génériques de tableau sont pris en charge uniquement pour les entrées de type json.
La syntaxe suivante montre comment utiliser le caractère générique, la plage et le jeton last
spécial :
path[elements ]
elements ::= {
*
| number
| number to number
| last
| {number...[, number] }
}
Le jeton last
spécial peut être utilisé à la place de la valeur numérique. Si une plage est spécifiée, la plage doit être spécifiée dans l’ordre croissant.
Exemples d’expressions de chemin d’accès SQL/JSON valides :
Chemin d’accès | Descriptif |
---|---|
$[*] |
Tous les éléments |
$[0] |
Premier élément |
$[0 to 2] |
Trois premiers éléments |
$[last] |
Dernier élément |
$[last, 0] |
non valide |
$[last, 2, 0, last] |
non valide |
$.creditcards[0].type |
Retourne la valeur de la propriété de type du premier élément dans le tableau creditcards . |
$.credit_cards[*].type |
Retourne la valeur de propriété de type de tous les éléments du creditcards tableau |
$.credit_cards[0, 2].type |
Retourne la valeur de la propriété de type du premier et du troisième élément dans le tableau creditcards . |
$.credit_cards[1 to 3].type |
Retourne la valeur de la propriété de type des deuxième, troisième et quatrième éléments dans le tableau creditcards . |
$.credit_cards[last].type |
Retourne la valeur de propriété de type du dernier élément dans le creditcards tableau |
$.credit_cards[last, 0].type |
Retourne la valeur de propriété de type du dernier et du premier élément dans creditcards le tableau |
Exemples
Les exemples de cette section font référence au texte JSON suivant.
{
"people": [{
"name": "John",
"surname": "Doe"
}, {
"name": "Jane",
"surname": null,
"active": true
}]
}
Le tableau suivant présente des exemples d’expressions de chemin.
Expression de chemin | Valeur |
---|---|
$.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"] |
Comment les fonctions intégrées gèrent-elles les chemins en double ?
Si le texte JSON contient des propriétés dupliquées - par exemple, deux clés portant le même nom au même niveau - les fonctions JSON_VALUE
et JSON_QUERY
retournent uniquement la première valeur qui correspond au chemin d’accès. Pour analyser un objet JSON qui contient des clés en double et retourner toutes les valeurs, utilisez OPENJSON
, comme illustré dans l’exemple suivant.
DECLARE @json AS NVARCHAR (MAX);
SET @json = N'{"person":{"info":{"name":"John", "name":"Jack"}}}';
SELECT value
FROM OPENJSON (@json, '$.person.info');
En savoir plus sur JSON dans SQL Server et Azure SQL Database
Pour une présentation visuelle de la prise en charge JSON intégrée dans SQL Server et Azure SQL Database, consultez la vidéo suivante :