首页 > 解决方案 > PostgreSQL 数组数据类型到 JSON 对象

问题描述

我正在尝试将 postgreSQL(11.4 版)表输出到视图中的 JSON 对象,其中一列是需要一些特殊格式的 INT 数组。该数组可以包含 4 到 10 个元素。

如果列(代码中的 col_arr)包含 {2, 4, 6, 8, 9},

我需要输出看起来像 {"option_1" : 2, "option_2" : 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

标签: arraysjsonpostgresql

解决方案


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

Db<>小提琴。


推荐阅读