我有一张桌子
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"}]
你能帮助我吗?
答案 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
更多详情: