Как заставить pgsql возвращать массив json - PullRequest
0 голосов
/ 26 декабря 2018

каждый, у меня возникла проблема с преобразованием данных в объект json.Существует таблица milestone со следующими данными:

id  name    parentId
a   test1   A
b   test2   B
c   test3   C

Я хочу преобразовать результат в тип json в Postgres:

[{"id": "a", "name": "test1", "parentId": "A"}]
[{"id": "b", "name": "test2", "parentId": "B"}]
[{"id": "c", "name": "test3", "parentId": "C"}]

, если кто-то знает, как с этим справитьсяПожалуйста, дайте мне знать, спасибо всем

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы можете получить каждую строку таблицы как простой объект json с помощью to_jsonb():

select to_jsonb(m)
from milestone m

                   to_jsonb                    
-----------------------------------------------
 {"id": "a", "name": "test1", "parentid": "A"}
 {"id": "b", "name": "test2", "parentid": "B"}
 {"id": "c", "name": "test3", "parentid": "C"}
(3 rows)

Если вы хотите получить отдельный массив элементов для каждой строки, используйте jsonb_build_array():

select jsonb_build_array(to_jsonb(m))
from milestone m

                jsonb_build_array                
-------------------------------------------------
 [{"id": "a", "name": "test1", "parentid": "A"}]
 [{"id": "b", "name": "test2", "parentid": "B"}]
 [{"id": "c", "name": "test3", "parentid": "C"}]
(3 rows)

Вы также можете получить все строки в виде массива json с помощью jsonb_agg():

select jsonb_agg(to_jsonb(m))
from milestone m

                                                                   jsonb_agg                                                                   
-----------------------------------------------------------------------------------------------------------------------------------------------
 [{"id": "a", "name": "test1", "parentid": "A"}, {"id": "b", "name": "test2", "parentid": "B"}, {"id": "c", "name": "test3", "parentid": "C"}]
(1 row)

Подробнее о функциях и операторах JSON в документации.

0 голосов
/ 26 декабря 2018

Вы можете использовать ROW_TO_JSON

С Документация :

Возвращает строку в виде объекта JSON.Перевод строки будет добавлен между элементами уровня 1, если pretty_bool имеет значение true.

Для запроса:

select 
  row_to_json(tbl) 
from 
 (select * from tbl) as tbl;

Вы можете проверить здесь в DEMO

...