JSONлише PostgreSQL

TO_JSONB

Перетворює значення — число, текст, масив чи цілий рядок таблиці — на JSON.

Синтаксис

TO_JSONB(<значення>)

Число стає JSON-числом, текст — JSON-рядком, масив — JSON-масивом. Якщо передати сам рядок таблиці (її псевдонім у запиті), вийде об'єкт з усіма стовпцями — зручно, щоб одним полем віддати запис застосунку чи зберегти в журнал змін.

Дані для прикладів

employees

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

Ці таблиці вже створено в пісочниці — приклади нижче працюють із ними. Хочеш повторити у своїй базі — скопіюй SQL.

Число, текст і масив
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"]

Таблиця результату показує JSON-рядок без лапок; у psql було б "Emma".

Увесь рядок — одним об'єктом
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"}

e тут — не стовпець, а весь рядок таблиці employees.

Значення стовпця — у JSONB_SETСкладніше
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 чекає JSON, тож ім'я зі стовпця спершу перетворюємо через TO_JSONB.

Зверни увагу

Текстовий літерал без типу не пройде: TO_JSONB('Emma') дасть помилку could not determine polymorphic type because input has type unknown. Вкажи тип: TO_JSONB('Emma'::text).

TO_JSONB(NULL) — це SQL-NULL, а не JSON-null. Потрібен саме null — пиши 'null'::jsonb.

Дати стають рядками у форматі ISO: TO_JSONB(DATE '2026-09-13') дає "2026-09-13", а timestamp — з літерою T посередині: "2026-09-13T15:47:00".

Схожі функції