【问题标题】:PostgreSQL Array datatype to JSON objectPostgreSQL 数组数据类型到 JSON 对象
【发布时间】:2019-10-03 23:54:45
【问题描述】:

我正在尝试将 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}

我尝试了大约 50 种不同的功能组合,下面的代码是我想出的,它实际上产生了我需要的东西。它看起来很可怕,而且我知道必须有一个更简单的解决方案,但我不知道它会是什么。任何建议将不胜感激。

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】:

    你可以使用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<>fiddle.

    【讨论】:

    猜你喜欢
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多