JSONsolo PostgreSQL

TO_JSONB

Convierte un valor —un número, un texto, un array o una fila entera de la tabla— en JSON.

Sintaxis

TO_JSONB(<valor>)

Un número pasa a ser un número JSON; un texto, una cadena JSON; un array, un array JSON. Si pasas la propia fila de la tabla (su alias en la consulta), obtienes un objeto con todas las columnas: útil para enviar un registro a la aplicación en un solo campo o guardarlo en un registro de cambios.

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

Un número, un texto y un array
SELECT TO_JSONB(42) AS number,
TO_JSONB('Emma'::text) AS text_value,
TO_JSONB(ARRAY['sql', 'postgres']) AS array_value;
numbertext_valuearray_value
42Emma["sql","postgres"]

La tabla de resultados muestra la cadena JSON sin comillas; en psql sería "Emma".

Una fila entera como un objeto
SELECT TO_JSONB(e) AS employee
FROM employees e;
employee
{"name":"Emma","bonus":300,"phone":"+44 7700 900123","salary":1200,"department":"backend"}
{"name":"Liam","bonus":null,"phone":null,"salary":1000,"department":"backend"}
{"name":"Olivia","bonus":150,"phone":"+44 7700 900456","salary":1350,"department":"frontend"}
{"name":"Noah","bonus":null,"phone":"+44 7700 900789","salary":950,"department":"frontend"}
{"name":"Sophia","bonus":200,"phone":null,"salary":1200,"department":"design"}

Aquí e no es una columna, sino la fila entera de la tabla employees.

El valor de una columna dentro de JSONB_SETAvanzado
SELECT name,
JSONB_SET('{"name": null}', '{name}', TO_JSONB(name)) AS doc
FROM employees;
namedoc
Emma{"name":"Emma"}
Liam{"name":"Liam"}
Olivia{"name":"Olivia"}
Noah{"name":"Noah"}
Sophia{"name":"Sophia"}

JSONB_SET espera JSON, así que primero convertimos el nombre de la columna con TO_JSONB.

Ten en cuenta

Un literal de texto sin tipo no funciona: TO_JSONB('Emma') da el error could not determine polymorphic type because input has type unknown. Indica el tipo: TO_JSONB('Emma'::text).

TO_JSONB(NULL) es un NULL de SQL, no un null de JSON. Si necesitas justo null, escribe 'null'::jsonb.

Las fechas se convierten en cadenas con formato ISO: TO_JSONB(DATE '2026-09-13') da "2026-09-13", y un timestamp lleva una T en medio: "2026-09-13T15:47:00".

Funciones relacionadas