Para empezar, comencemos mostrando el resultado de una declaración SELECT en formato JSON. Consideremos la siguiente consulta T-SQL, que devuelve el resultado a continuación:
12345678910SELECTTOP10 c.Nombre de la empresa, c.Ciudad, c.País,CONTEO(o.OrderId)COMO CONTEO DE PEDIDOS DE CLIENTES c UNIR PEDIDOS o EN c.ID DE CLIENTE = o.GRUPO DE CLIENTES c.Nombre de la empresa, c.Ciudad, c.País CONTEO DE PEDIDOS(o.OrderId)DESC
sql
A continuación, agregue FOR JSON PATH al final de la consulta como se muestra a continuación y ejecútela de nuevo. El conjunto de resultados ahora consiste en una sola fila con un enlace que contiene el mismo conjunto de datos pero formateado como JSON. Haga clic en el vínculo para verlo en una ficha separada de SQL Server Management Studio.
Desafortunadamente, la SSMS no proporciona un método nativo para mostrar a JSON de una manera amistosa en el momento de escribir esto. Afortunadamente, la mayoría de los editores de texto (Notepad++ o Código VisualStudio, por nombrar dos ejemplos) tienen plugins que pueden encargarse de eso, como se muestra a continuación.
Como pueden ver, cada registro fue convertido en un objeto JSON y el conjunto de resultados se convirtió en un conjunto de tales objetos. Finalmente, cada celda individual está representada por un par clave-valor específico. Alternativamente, puede añadir un elemento raíz reemplazando FOR JSON PATH con FOR JSON PATH, ROOT($0027Top10Customers$0027):
1234567891011SELECTTOP10 c.Nombre de la empresa, c.Ciudad, c.País,CONTABLE(o.OrderId)COMO CONTEO DE PEDIDOS DE CLIENTES c UNIR PEDIDOS o EN c.ID DE CLIENTE = o.GRUPO DE CLIENTES c.Nombre de la empresa, c.Ciudad, c.País CONTEBLE DE PEDIDOS(o.OrderId)DESCFORRAR JSON PATH, RAÍZ($0027Top10Clientes$0027)
sql
Esta imagen muestra la diferencia entre ambas consultas (con y sin un elemento raíz):
La decisión de incluir o no un elemento raíz depende de las necesidades de la aplicación que consume el conjunto de resultados. En cualquier caso, gracias a FOR JSON PATH, se pueden devolver los datos JSON directamente para no tener que serializar la respuesta por separado a nivel de aplicación.