Microsoft SQL Server
PARA JSON
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.