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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow