Mettre en forme les résultats de requête en tant que JSON avec FOR JSON

S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (pool SQL serverless uniquement)

Mettez les résultats de requête au format JSON ou exportez des données depuis SQL Server au format JSON en ajoutant la clause FOR JSON à une instruction SELECT. Utilisez la clause pour simplifier les FOR JSON applications clientes en déléguant la mise en forme de la sortie JSON de l’application vers SQL Server.

Remarque

Azure Data Studio est l’éditeur de requête recommandé pour les requêtes JSON, car il met automatiquement en forme les résultats JSON, comme indiqué dans cet article. SQL Server Management Studio affiche une chaîne non mise en forme.

Mettre en forme les résultats de la requête

Lorsque vous utilisez la FOR JSON clause, vous pouvez spécifier explicitement la structure de la sortie JSON ou laisser la structure de l’instruction SELECT déterminer la sortie.

  • Pour maintenir un contrôle total sur le format de la sortie JSON, utilisez FOR JSON PATH. Vous pouvez créer des objets wrapper et imbriquer des propriétés complexes.

  • Pour mettre en forme automatiquement la sortie JSON en fonction de la structure de l’instruction SELECT , utilisez FOR JSON AUTO.

Voici un exemple d’instruction SELECT avec la FOR JSON clause et sa sortie.

Diagram showing how FOR JSON works.

Contrôler la sortie avec FOR JSON PATH

En PATH mode, vous pouvez utiliser la syntaxe des points , par exemple, Item.Price pour mettre en forme la sortie imbriquée.

Voici un exemple de requête qui utilise PATH le mode avec la FOR JSON clause. L’exemple suivant utilise également l’option ROOT pour spécifier un élément racine nommé.

Diagram of flow of FOR JSON output.

Plus d’informations sur FOR JSON PATH

Pour plus d’informations et d’exemples, consultez Mettre en forme la sortie JSON imbriquée avec le mode PATH (SQL Server) .

Pour plus d’informations sur la syntaxe et l’utilisation, consultez la clause FOR (Transact-SQL).

Contrôler d’autres options de sortie JSON

Contrôlez la sortie de la FOR JSON clause à l’aide des options supplémentaires suivantes.

  • ROOT

    Pour ajouter un élément de niveau supérieur unique à la sortie JSON, spécifiez l’option ROOT . Si vous ne spécifiez pas cette option, la sortie JSON n’a aucun élément racine. Pour plus d’informations, consultez Ajouter un nœud racine à la sortie JSON avec l’option RACINE (SQL Server) .

  • INCLUDE_NULL_VALUES

    Pour inclure des valeurs null dans la sortie JSON, spécifiez l’option INCLUDE_NULL_VALUES . Si vous ne spécifiez pas cette option, la sortie n’inclut pas de propriétés JSON pour les NULL valeurs dans les résultats de la requête. Pour plus d’informations, consultez Include Null Values in JSON - INCLUDE_NULL_VALUES Option.

  • WITHOUT_ARRAY_WRAPPER

    Pour supprimer les crochets qui entourent la sortie JSON de la FOR JSON clause par défaut, spécifiez l’option WITHOUT_ARRAY_WRAPPER . Utilisez cette option pour générer un seul objet JSON en tant que sortie d’un résultat de ligne unique. Si vous ne spécifiez pas cette option, la sortie JSON est mise en forme sous forme de tableau, autrement dit, la sortie est placée entre crochets. Pour plus d’informations, consultez Supprimer les crochets de JSON - option WITHOUT_ARRAY_WRAPPER.

Sortie de la clause FOR JSON

La sortie de la clause FOR JSON a les caractéristiques suivantes :

  1. Le jeu de résultats contient une seule colonne.

    • Un petit jeu de résultats peut contenir une seule ligne.
    • Un grand jeu de résultats fractionne la longue chaîne JSON sur plusieurs lignes.
      • Par défaut, SQL Server Management Studio (SSMS) concatène les résultats en une seule ligne quand la valeur du paramètre de sortie est Résultats dans des grilles. La barre d’état SSMS affiche le nombre de lignes réel.

      • D’autres applications clientes peuvent nécessiter du code pour recombiner des résultats longs en une seule chaîne JSON valide en concaténant le contenu de plusieurs lignes. Pour obtenir un exemple de ce code dans une application C#, consultez Utiliser la sortie de FOR JSON dans une application cliente C#.

        Screenshot of FOR JSON output in SQL Server Management Studio.

  2. Les résultats sont présentés sous la forme de tableau d’objets JSON.

    • Le nombre d’éléments du tableau JSON est égal au nombre de lignes dans les résultats de l’instruction SELECT (avant l’application de la clause FOR JSON).

    • Chaque ligne des résultats de l’instruction SELECT (avant l’application de la clause FOR JSON) devient un objet JSON distinct dans le tableau.

    • Chaque colonne des résultats de l’instruction SELECT (avant l’application de la clause FOR JSON) devient une propriété de l’objet JSON.

  3. Le nom et la valeur des colonnes sont échappés selon la syntaxe JSON. Pour plus d’informations, consultez Comment FOR JSON échappe des caractères spéciaux et des caractères de contrôle (SQL Server).

Exemple

Voici un exemple qui montre comment la clause FOR JSON met en forme la sortie JSON.

Résultats de la requête

A B C D
10 11 12 X
20 21 22 Y
30 31 32 Z

Sortie JSON

[{
    "A": 10,
    "B": 11,
    "C": 12,
    "D": "X"
}, {
    "A": 20,
    "B": 21,
    "C": 22,
    "D": "Y"
}, {
    "A": 30,
    "B": 31,
    "C": 32,
    "D": "Z"
}]