Buscar..


PARA JSON PATH

Formatea los resultados de la consulta SELECT como texto JSON. La cláusula FOR JSON PATH se agrega después de la consulta:

SELECT top 3 object_id, name, type, principal_id FROM sys.objects
FOR JSON PATH

Los nombres de columna se utilizarán como claves en JSON, y los valores de celda se generarán como valores JSON. El resultado de la consulta sería una matriz de objetos JSON:

[
  {"object_id":3,"name":"sysrscols","type":"S "},       
  {"object_id":5,"name":"sysrowsets","type":"S "},
  {"object_id":6,"name":"sysclones","type":"S "}
]

Los valores NULL en la columna principal_id se ignorarán (no se generarán).

FOR JSON PATH con alias de columna

FOR JSON PATH le permite controlar el formato del JSON de salida utilizando alias de columna:

SELECT top 3 object_id as id, name as [data.name], type as [data.type]
FROM sys.objects
FOR JSON PATH

El alias de columna se utilizará como nombre de clave. Los alias de columna separados por puntos (data.name y data.type) se generarán como objetos anidados. Si dos columnas tienen el mismo prefijo en notación de puntos, se agruparán en un solo objeto (datos en este ejemplo):

[
  {"id":3,"data":{"name":"sysrscols","type":"S "}},
  {"id":5,"data":{"name":"sysrowsets","type":"S "}},
  {"id":6,"data":{"name":"sysclones","type":"S "}}
]

Cláusula FOR JSON sin contenedor de matriz (objeto único en la salida)

La opción WITHOUT_ARRAY_WRAPPER le permite generar un solo objeto en lugar de la matriz. Utilice esta opción si sabe que devolverá una sola fila / objeto:

SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
WHERE object_id = 3
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

Solo se devolverá un objeto en este caso:

{"object_id":3,"name":"sysrscols","type":"S "}

INCLUYE_NULL_VALUES

La cláusula FOR JSON ignora los valores NULL en las celdas. Si desea generar "clave": pares nulos para celdas que contienen valores NULL, agregue la opción INCLUDE_NULL_VALUES en la consulta:

SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
FOR JSON PATH, INCLUDE_NULL_VALUES

Se generarán valores NULL en la columna principal_id:

[
  {"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}
]

Envolviendo resultados con objeto ROOT

Envuelve la matriz JSON devuelta en un objeto raíz adicional con la clave especificada:

SELECT top 3 object_id, name, type FROM sys.objects
FOR JSON PATH, ROOT('data')

El resultado de la consulta sería una matriz de objetos JSON dentro del objeto contenedor:

{
  "data":[
           {"object_id":3,"name":"sysrscols","type":"S "},
           {"object_id":5,"name":"sysrowsets","type":"S "},
           {"object_id":6,"name":"sysclones","type":"S "}
         ]
}

Para json auto

Anida automáticamente los valores de la segunda tabla como una sub-matriz anidada de objetos 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

El resultado de la consulta sería una matriz de objetos 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"}
     ]
  }
]

Creando estructura JSON anidada personalizada

Si necesita alguna estructura JSON compleja que no se pueda crear utilizando FOR JSON PATH o FOR JSON AUTO, puede personalizar su salida JSON colocando las subconsultas FOR JSON como expresiones de columna:

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

Cada subconsulta producirá un resultado JSON que se incluirá en el contenido principal de JSON.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow