PostgreSQL | Как привести запись таблицы к объекту JSON?

PostgreSQL | Как привести запись таблицы к объекту JSON?

Как получить данные из одной записи таблицы в виде JSON объекта, а не таблицы?

У нас есть таблица с данными. Выглядит она примерно так:

Вид таблицы из которой хотим получить запись в виде JSON-объекта - PostgreSQL
Вид таблицы из которой хотим получить запись в виде JSON-объекта — PostgreSQL

Мы хотим получить одну запись этой таблицы в виде JSON-объекта, а не строки таблицы с ячейками. Как это сделать?

 

Функция row_to_json()

В PostgreSQL для создания объектов json существует специальная функция, которая называется row_to_json().

Она может принимать «тип данных таблицы«. Это значит, что каждая таблица в PostgreSQL имеет свой уникальный тип данных. Этот тип прописывается в системных каталогах и живёт до тех пор, пока живёт таблица. Самое главное то, что если состав таблицы меняется, то и тип данных этой таблицы также меняется. Но нам не нужно заморачиваться по этому поводу.

Мы можем написать универсальное решение по конвертации табличной строчки (записи) в JSON-формат.

SELECT row_to_json(t_all_dp) FROM a.t_all_dp WHERE id = 2045167;

Здесь t_all_dp — это одновременно название нашей таблицы и название типа данных. Главное передавать в функцию только имя таблицы, а не полный путь, который включал бы схему данных.

Результат вызова данного запроса вернёт нам json-объект:

Получили json-объект из табличной записи в PostgreSQL
Получили json-объект из табличной записи в PostgreSQL

Самое главное, что мы получили ключи объекта, которые полностью соответствуют названиям столбцов таблицы.

 

Получение нескольких json-объектов на основании табличных записей в PostgreSQL

Мы можем получить не только один объект от одной записи. Мы можем получить даже таблицу из json-объектов:

SELECT row_to_json(t_all_dp) FROM a.t_all_dp WHERE idd = 30000;

Вывод выглядит так:

Получили несколько json-объектов в виде таблицы из одного столбца в PostgreSQL
Получили несколько json-объектов в виде таблицы из одного столбца в PostgreSQL

Мы просто немного поправили условие WHERE и выбрали столбец idd.

 

Получение массива json-объектов на основании табличных записей в PostgreSQL

Самое крутое, это получение массива из объектов. Очень удобное решение для последующей обработки результатов в JavaScript или NodeJS.

В наше выражение нужно добавить функцию ARRAY().

SELECT ARRAY(SELECT row_to_json(t_all_dp) FROM a.t_all_dp WHERE idd = 30000);

Результат:

Получили табличные записи в виде массива из JSON-объектов в PostgreSQL
Получили табличные записи в виде массива из JSON-объектов в PostgreSQL

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org

Раздел «Функции для создания JSON» — https://postgrespro.ru/docs/postgresql/14/functions-json#FUNCTIONS-JSON-CREATION-TABLE