Tema SQL
FOR JSON (SQL Server)
Cláusula que serializa el resultado de un SELECT como cadena JSON (PATH o AUTO). Muy usada en APIs y integraciones; distinto del tipo JSON nativo de PostgreSQL/mysql.
Descripción
SELECT … FOR JSON PATH envía un array de objetos con nombres de columna como claves; AUTO infiere anidación por puntos en alias. INCLUDE_NULL_VALUES controla nulls; WITHOUT_ARRAY_WRAPPER para objeto único. ROOT() añade contenedor. Escapes y tipos datetime se formatean ISO en versiones recientes. No sustituye a capa de serialización en aplicación para reglas complejas. En MySQL JSON_ARRAYAGG/JSON_OBJECT; en PostgreSQL row_to_json/json_agg.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
SELECT col1, col2
FROM tabla
FOR JSON PATH, ROOT('items');
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- PATH vs AUTO
- PATH es predecible; AUTO agrupa por prefijos de alias.
- Tamaño
- Resultado NVARCHAR(MAX); vigila límites en clientes.
Ejemplos
Ejemplo 1
SELECT id, nombre, email
FROM clientes
WHERE activo = 1
FOR JSON PATH, ROOT('clientes');
SELECT *
FROM pedidos
WHERE id = 10
FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER;
Ejemplo 2
SELECT id, nombre
FROM clientes
WHERE id IN (1,2,3)
FOR JSON PATH, INCLUDE_NULL_VALUES;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.