PostgreSQL数组数据类型为JSON对象

问题描述 投票:0回答:1

我正在尝试将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
arrays json postgresql
1个回答
1
投票

您可以使用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

© www.soinside.com 2019 - 2024. All rights reserved.