Как получить данные из одной записи таблицы в виде JSON объекта, а не таблицы?
У нас есть таблица с данными. Выглядит она примерно так:
![Вид таблицы из которой хотим получить запись в виде JSON-объекта - PostgreSQL Вид таблицы из которой хотим получить запись в виде JSON-объекта - PostgreSQL](https://efim360.ru/wp-content/uploads/vid-tabliczy-iz-kotoroj-hotim-poluchit-zapis-v-vide-json-obekta-postgresql.png)
Мы хотим получить одну запись этой таблицы в виде 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](https://efim360.ru/wp-content/uploads/poluchili-json-obekt-iz-tablichnoj-zapisi-v-postgresql.png)
Самое главное, что мы получили ключи объекта, которые полностью соответствуют названиям столбцов таблицы.
Получение нескольких json-объектов на основании табличных записей в PostgreSQL
Мы можем получить не только один объект от одной записи. Мы можем получить даже таблицу из json-объектов:
SELECT row_to_json(t_all_dp) FROM a.t_all_dp WHERE idd = 30000;
Вывод выглядит так:
![Получили несколько json-объектов в виде таблицы из одного столбца в PostgreSQL Получили несколько json-объектов в виде таблицы из одного столбца в PostgreSQL](https://efim360.ru/wp-content/uploads/poluchili-neskolko-json-obektov-v-vide-tabliczy-iz-odnogo-stolbcza-v-postgresql.png)
Мы просто немного поправили условие 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](https://efim360.ru/wp-content/uploads/poluchili-tablichnye-zapisi-v-vide-massiva-iz-json-obektov-v-postgresql-1024x154.png)
Информационные ссылки
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org
Раздел «Функции для создания JSON» — https://postgrespro.ru/docs/postgresql/14/functions-json#FUNCTIONS-JSON-CREATION-TABLE