En el artículo anterior vimos cómo JSON_TABLE() permite convertir un documento JSON en una tabla relacional.
Pero también podemos recorrer el camino inverso: generar documentos JSON directamente desde SQL.
Y eso puede simplificar muchísimo el código de una API.
JSON_OBJECT()
La forma más sencilla de construir un objeto JSON es con JSON_OBJECT().
SELECT JSON_OBJECT(
'id', id,
'name', name,
'email', email
)
FROM customer;
Resultado:
{
"id": 1,
"name": "John",
"email": "john@example.com"
}
JSON_ARRAYAGG()
Si queremos agrupar varias filas en un único arreglo JSON, podemos usar JSON_ARRAYAGG().
SELECT JSON_ARRAYAGG(name)
FROM customer;
Resultado:
[
"John",
"Mary",
"Alice"
]
JSON_OBJECTAGG()
También podemos construir un objeto JSON a partir de pares clave-valor.
SELECT JSON_OBJECTAGG(
id,
name
)
FROM customer;
Resultado:
{
"1": "John",
"2": "Mary",
"3": "Alice"
}
Es una función muy útil cuando necesitamos generar mapas o diccionarios.
Lo interesante aparece cuando empezamos a combinarlas.
Por ejemplo, podemos generar un arreglo de objetos JSON:
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
'id', id,
'name', name,
'email', email
)
)
FROM customer;
Resultado:
[
{
"id": 1,
"name": "John",
"email": "john@example.com"
},
{
"id": 2,
"name": "Mary",
"email": "mary@example.com"
}
]
Ese resultado ya está prácticamente listo para ser devuelto por una API REST.
Muchas veces seguimos trayendo las filas a la aplicación para convertirlas en objetos y luego serializarlas nuevamente a JSON.
Sin embargo, MySQL puede hacer ese trabajo por nosotros con una sola consulta.
No significa que siempre sea la mejor opción, pero es una herramienta muy útil para reportes, exportaciones, endpoints sencillos o consultas donde el resultado final ya es un documento JSON.
Después de descubrir estas funciones, es difícil volver a pensar que SQL solo sirve para devolver filas y columnas.

No hay comentarios.:
Publicar un comentario