PostgreSQL表到json

时间:2015-04-07 09:42:48

标签: json postgresql

我有一张桌子

 key | value
-----+-------
 a   | "foo"
 b   | "bar"

如何获得结果

{"a": "foo", "b": "bar"}

不适用于

select array_to_json(array_agg(t)) from table t; -- I get  [{"key": "a", "value": "foo"}, {"key": "b", "value": "bar"}]

你能帮助我吗?

3 个答案:

答案 0 :(得分:1)

如果您使用的是PostgreSQL 9.4,则可以使用以下代码从一列中获取键,从另一列中获取值并创建一个JSON对象:

 select json_object(array_agg(key), array_agg(value)) from table;

对于早期版本,我目前还不知道一种简单的方法。

答案 1 :(得分:1)

PostgreSQL≥9.4:

SELECT json_object(array_agg(key), array_agg(value))
FROM  t;     

┌────────────────────────────┐
│        json_object         │
├────────────────────────────┤
│ {"a" : "foo", "b" : "bar"} │
└────────────────────────────┘
(1 row)

答案 2 :(得分:0)

对于PostgreSQL 9.4+,有一个aggregate function专门针对此:

SELECT json_object_agg(key, value)
FROM   t

这可以避免创建2个PostgreSQL阵列的成本。

对于较旧的PostgreSQL版本,您需要自己连接结果:

SELECT concat('{', string_agg(to_json(key) || ':' || to_json(value), ','), '}')::json
FROM   t

更多详情: