我正在尝试将postgreSQL(版本11.4)表输出到视图中的JSON对象,其中一列是需要一些特殊格式的INT数组。数组可以是4到10个元素。
如果该列(代码中的col_arr)包含{2,4,6,6,8,9},
我需要输出以看起来像{“ option_1”:2,“ option_2”:4,4,“ option_3”:6,“ option_4”:8,“ option_5”:9}
我尝试了大约五十种不同的功能组合,下面的代码正是我想到的,实际上产生了我所需要的。它看起来很可怕,我知道必须有一个更简单的解决方案,但是我不知所措。任何建议,将不胜感激。
SELECT cast('{ ' || string_agg('"' || propname || '" : ' || propval,' , ') || ' }' as json) as col_arr
FROM (SELECT t.table_id, a.elem as propval, 'option_' || a.nr as propname
FROM t_table AS t
LEFT JOIN LATERAL unnest(col_arr)
WITH ORDINALITY AS a(elem, nr) ON true) pt
GROUP BY table_id
您可以使用json_object_agg()
:
json_object_agg()
select table_id, json_object_agg(format('option_%s', ord), value) as col_arr
from t_table as t
cross join unnest(col_arr) with ordinality as a(value, ord)
group by table_id