PostgreSQL - 将行转换为 JSON 键/值对

Posted

技术标签:

【中文标题】PostgreSQL - 将行转换为 JSON 键/值对【英文标题】:PostgreSQL - Convert rows into JSON key/value pair 【发布时间】:2018-06-22 07:54:57 【问题描述】:

我有一个像这样的简单表格:

Key_1 | Key_2 |价值

行有多个 key_1 和 key_2 的组合。

我想将此表中的行放入 JSON 结构中,如下所示:


    "myJSON": 
        "key_1": 
            "key_2": value,
            "key_2": value
        
        "key_1": 
            "key_2": value,
            "key_2": value
        

我能够使用此查询将输出放入行中:

SELECT
    key_1,
    jsonb_object_agg(key_2,value)
FROM table
GROUP BY key_1
ORDER BY key_1;

这会产生如下输出:

key_1 | "key_2":value, "key_2": value
key_1 | "key_2":value, "key_2": value

但是,我无法完成最后一步,将这些返回的行放入 JSON 对象结构中,如上所述。我不能使用另一个聚合函数,因为它抱怨嵌套。

有什么办法可以做到吗,还是我必须与数据库外部的结果集有关?

【问题讨论】:

【参考方案1】:

这就是我想要的:

WITH t AS (
  SELECT
      key_1,
      jsonb_object_agg(key_2,value) key_pair
  FROM table
  GROUP BY key_1
  ORDER BY key_1
)
SELECT jsonb_object_agg(key_1, key_pair)
FROM t

【讨论】:

以上是关于PostgreSQL - 将行转换为 JSON 键/值对的主要内容,如果未能解决你的问题,请参考以下文章

sh 将行输出转换为json数组

将行数据转换为带键列的单列

PostgreSQL9.4往jsonb字段新增键值SQL怎么写

Postgresql 更新 JSON 列保留一些键值并将附加键值添加为空

postgresql中的Rails json列不接受任何值,并在存储后调用时返回nil

PostgreSQL 9.2 - 将 TEXT json 字符串转换为 json/hstore 类型