Microsoft SQL Server
POUR JSON
Recherche…
POUR JSON PATH
Formate les résultats de la requête SELECT en tant que texte JSON. La clause FOR JSON PATH est ajoutée après la requête:
SELECT top 3 object_id, name, type, principal_id FROM sys.objects
FOR JSON PATH
Les noms de colonne seront utilisés comme clés dans JSON et les valeurs de cellule seront générées en tant que valeurs JSON. Le résultat de la requête serait un tableau d'objets JSON:
[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
Les valeurs NULL dans la colonne principal_id seront ignorées (elles ne seront pas générées).
POUR JSON PATH avec alias de colonne
FOR JSON PATH vous permet de contrôler le format du JSON de sortie en utilisant des alias de colonnes:
SELECT top 3 object_id as id, name as [data.name], type as [data.type]
FROM sys.objects
FOR JSON PATH
L'alias de colonne sera utilisé comme nom de clé. Les alias de colonne séparés par des points (data.name et data.type) seront générés en tant qu'objets imbriqués. Si deux colonnes ont le même préfixe en notation point, elles seront regroupées dans un seul objet (données dans cet exemple):
[
{"id":3,"data":{"name":"sysrscols","type":"S "}},
{"id":5,"data":{"name":"sysrowsets","type":"S "}},
{"id":6,"data":{"name":"sysclones","type":"S "}}
]
Clause FOR JSON sans wrapper de tableau (objet unique en sortie)
L'option WITHOUT_ARRAY_WRAPPER permet de générer un objet unique au lieu du tableau. Utilisez cette option si vous savez que vous allez renvoyer une seule ligne / objet:
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
WHERE object_id = 3
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
Un seul objet sera retourné dans ce cas:
{"object_id":3,"name":"sysrscols","type":"S "}
INCLUDE_NULL_VALUES
La clause FOR JSON ignore les valeurs NULL dans les cellules. Si vous souhaitez générer des "clés": paires nulles pour les cellules contenant des valeurs NULL, ajoutez l'option INCLUDE_NULL_VALUES dans la requête:
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
FOR JSON PATH, INCLUDE_NULL_VALUES
Les valeurs NULL dans la colonne principal_id seront générées:
[
{"object_id":3,"name":"sysrscols","type":"S ","principal_id":null},
{"object_id":5,"name":"sysrowsets","type":"S ","principal_id":null},
{"object_id":6,"name":"sysclones","type":"S ","principal_id":null}
]
Emballage des résultats avec l'objet ROOT
Enroule le tableau JSON renvoyé dans un objet racine supplémentaire avec la clé spécifiée:
SELECT top 3 object_id, name, type FROM sys.objects
FOR JSON PATH, ROOT('data')
Le résultat de la requête serait un tableau d'objets JSON à l'intérieur de l'objet wrapper:
{
"data":[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
}
POUR JSON AUTO
Niche automatiquement les valeurs de la deuxième table en tant que sous-tableau imbriqué d'objets JSON:
SELECT top 5 o.object_id, o.name, c.column_id, c.name
FROM sys.objects o
JOIN sys.columns c ON o.object_id = c.object_id
FOR JSON AUTO
Le résultat de la requête serait un tableau d'objets JSON:
[
{
"object_id":3,
"name":"sysrscols",
"c":[
{"column_id":12,"name":"bitpos"},
{"column_id":6,"name":"cid"}
]
},
{
"object_id":5,
"name":"sysrowsets",
"c":[
{"column_id":13,"name":"colguid"},
{"column_id":3,"name":"hbcolid"},
{"column_id":8,"name":"maxinrowlen"}
]
}
]
Création d'une structure JSON imbriquée personnalisée
Si vous avez besoin d'une structure JSON complexe qui ne peut pas être créée avec FOR JSON PATH ou FOR JSON AUTO, vous pouvez personnaliser votre sortie JSON en plaçant les sous-requêtes FOR JSON en tant qu'expressions de colonne:
SELECT top 5 o.object_id, o.name,
(SELECT column_id, c.name
FROM sys.columns c WHERE o.object_id = c.object_id
FOR JSON PATH) as columns,
(SELECT parameter_id, name
FROM sys.parameters p WHERE o.object_id = p.object_id
FOR JSON PATH) as parameters
FROM sys.objects o
FOR JSON PATH
Chaque sous-requête produira un résultat JSON qui sera inclus dans le contenu JSON principal.