Analyser et transformer des données JSON avec OPENJSON
S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
La fonction d’ensemble de lignes OPENJSON
convertit du texte JSON en un ensemble de lignes et de colonnes. Après avoir transformé une collection JSON en ensemble de lignes avec OPENJSON
, vous pouvez exécuter n’importe quelle requête SQL sur les données retournées ou l’insérer dans une table SQL Server. Pour plus d’informations sur l’utilisation de données JSON dans le moteur de base de données SQL Server, consultez Données JSON dans SQL Server.
La fonction OPENJSON
prend un seul objet JSON ou une collection d’objets JSON, et les transforme en une ou plusieurs lignes. Par défaut, la fonction OPENJSON
retourne les données suivantes :
- À partir d’un objet JSON, toutes les paires clé/valeur qu’elle trouve au premier niveau.
- À partir d’un tableau JSON, tous les éléments du tableau avec leurs index.
Vous pouvez ajouter une clause WITH
facultative afin de fournir un schéma qui définit explicitement la structure de la sortie.
OPENJSON avec la sortie par défaut
Quand vous utilisez la fonction OPENJSON
sans fournir un schéma explicite pour les résultats (autrement dit, sans clause WITH
après OPENJSON
), la fonction retourne une table comportant les trois colonnes suivantes :
- Le
name
de la propriété dans l’objet d’entrée (ou l’index de l’élément dans le tableau d’entrée). - La
value
de la propriété ou de l’élément du tableau. - Le
type
(par exemple, chaîne, nombre, booléen, tableau ou objet).
OPENJSON
retourne chaque propriété de l’objet JSON, ou chaque élément du tableau, sous la forme d’une ligne distincte.
L’exemple ci-dessous utilise OPENJSON
avec le schéma par défaut (autrement dit, sans la clause WITH
facultative) et retourne une ligne pour chaque propriété de l’objet JSON.
DECLARE @json NVARCHAR(MAX);
SET @json='{ "name": "John", "surname": "Doe", "age": 45, "skills": [ "SQL", "C#", "MVC" ]}';
SELECT *
FROM OPENJSON(@json);
Voici le jeu de résultats obtenu.
key | value | type |
---|---|---|
name |
John |
1 |
surname |
Doe |
1 |
age |
45 |
2 |
skills |
[ "SQL" ,"C#" ,"MVC" ] |
4 |
Pour plus d’informations et pour obtenir des exemples, consultez Utiliser OPENJSON avec le schéma par défaut.
Pour plus de détails sur la syntaxe et l’utilisation, consultez OPENJSON.
Sortie OPENJSON avec une structure explicite
Quand vous spécifiez un schéma pour les résultats à l’aide de la clause WITH
de la fonction OPENJSON
, la fonction retourne une table contenant uniquement les colonnes que vous définissez dans la clause WITH
. Dans la clause WITH
facultative, vous spécifiez un ensemble de colonnes de sortie, leurs types et les chemins des propriétés sources JSON pour chaque valeur de sortie. OPENJSON
itère le tableau d’objets JSON, lit la valeur du chemin spécifié pour chaque colonne, puis convertit la valeur dans le type spécifié.
L’exemple suivant utilise OPENJSON
avec un schéma pour la sortie que vous spécifiez explicitement dans la clause WITH
.
DECLARE @json NVARCHAR(MAX);
SET @json = N'[
{
"Order": {
"Number": "SO43659",
"Date": "2024-05-31T00:00:00"
},
"AccountNumber": "AW29825",
"Item": {
"Price": 2024.9940,
"Quantity": 1
}
},
{
"Order": {
"Number": "SO43661",
"Date": "2024-06-01T00:00:00"
},
"AccountNumber": "AW73565",
"Item": {
"Price": 2024.9940,
"Quantity": 3
}
}
]';
SELECT *
FROM OPENJSON(@json) WITH (
Number VARCHAR(200) '$.Order.Number',
DATE DATETIME '$.Order.Date',
Customer VARCHAR(200) '$.AccountNumber',
Quantity INT '$.Item.Quantity'
);
Voici le jeu de résultats obtenu.
Number | Date | Customer | Quantité |
---|---|---|---|
SO43659 |
2024-05-31T00:00:00 |
AW29825 |
1 |
SO43661 |
2024-06-01T00:00:00 |
AW73565 |
3 |
Cette fonction retourne et met en forme les éléments d’un tableau JSON.
Pour chaque élément du tableau JSON,
OPENJSON
génère une nouvelle ligne dans la table de sortie. Les deux éléments du tableau JSON sont convertis en deux lignes dans la table retournée.Pour chaque colonne spécifiée à l’aide de la syntaxe
colName type json_path
,OPENJSON
convertit la valeur trouvée dans chaque élément de tableau sur le chemin spécifié dans le type spécifié. Dans cet exemple, les valeurs de la colonneDate
sont tirées de chaque élément sur le chemin$.Order.Date
et converties en valeur datetime.
Pour plus d’informations et pour obtenir des exemples, consultez Utilisation d’OPENJSON avec un schéma explicite (SQL Server).
Pour plus de détails sur la syntaxe et l’utilisation, consultez OPENJSON.
OPENJSON requiert le niveau de compatibilité 130
La fonction OPENJSON
est disponible uniquement sous le niveau de compatibilité 130
ou supérieur. Si le niveau de compatibilité de la base de données est inférieur à 130
, SQL Server ne peut pas trouver ni exécuter la fonction OPENJSON
. Les autres fonctions JSON intégrées sont disponibles à tous les niveaux de compatibilité.
Vous pouvez vérifier le niveau de compatibilité dans la vue sys.databases
ou dans les propriétés de la base de données et modifier le niveau de compatibilité d’une base de données à l’aide de la commande suivante :
ALTER DATABASE <DatabaseName> SET COMPATIBILITY_LEVEL = 130;