Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à : SQL Server 2016 (13.x) et versions
ultérieures Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (réservé au pool SQL sans serveur)
Base de données SQL dans Microsoft Fabric
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.
- Lorsque vous appelez JSON_VALUE pour extraire une valeur du texte JSON.
- Lorsque vous appelez JSON_QUERY pour extraire un objet JSON ou un tableau.
- Lorsque 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 chemin
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
laxmode, la fonction retourne des valeurs vides si l’expression de chemin d’accès contient une erreur. Par exemple, si vous demandez la valeur$.nameet que le texte JSON ne contient pas denameclé, la fonction retourne null, mais ne génère pas d’erreur.En
strictmode, 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');
Path
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,
$.nameet$."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 points (.), 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,surnameest 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
Note
La prise en charge des caractères génériques et des plages de tableaux est actuellement disponible en préversion et disponible uniquement dans SQL Server 2025 (17.x).
SQL Server 2025 (17.x) 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 :
| Path | Description |
|---|---|
$[*] |
Tous les éléments |
$[0] |
Premier élément |
$[0 to 2] |
Trois premiers éléments |
$[last] |
Dernier élément |
$[last, 0] |
Invalid |
$[last, 2, 0, last] |
Invalid |
$.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 |
Examples
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 d’accès | 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"] |
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
Pour une présentation visuelle de la prise en charge JSON intégrée, consultez la vidéo suivante :