Tema SQL
jsonb_build_object() (PostgreSQL)
Construye un valor jsonb a partir de pares clave-valor variádicos. Base para APIs y columnas semiestructuradas; el binario jsonb indexa y compara eficientemente frente a json puro.
Descripción
jsonb_build_object(k1, v1, k2, v2, …) genera un objeto JSON sin parsear texto manual. Las claves son texto; los valores pueden ser escalares, json/jsonb u otros convertibles. Combina con row_to_json/jsonb_build_object para serializar filas. En MySQL JSON_OBJECT existe con semántica parecida; en SQL Server FOR JSON PATH. Operadores como ->, ->>, @> aplican sobre jsonb. Evita concatenar cadenas JSON a mano: pierdes validación y escapado. Para arrays usa jsonb_build_array.
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.
jsonb_build_object(clave1, valor1 [, clave2, valor2 ...])
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.
- json vs jsonb
- jsonb almacena binario desnormalizado; igualdad semántica y contención @>.
- Nulos
- Los valores SQL NULL suelen volverse JSON null según función; revisa documentación de la versión.
- MySQL
- JSON_OBJECT con pares nombre-valor similar.
Ejemplos
Ejemplo 1
SELECT jsonb_build_object('nombre', 'Juan', 'edad', 30) AS doc;
SELECT jsonb_build_object('id', id, 'nombre', nombre, 'meta', extras)
FROM clientes
WHERE activo;
Ejemplo 2
SELECT jsonb_build_object(
'total', COUNT(*),
'ok', COUNT(*) FILTER (WHERE estado = 'ok')
) AS resumen
FROM trabajos;
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.