我在Postgres(10.4)中以
的形式获取数据id | my_json
-----------------------------------
1 | {"a": 1, "b": 2, "c": [1,2,3]}
2 | {"a": 3, "b": 5, "c": [2,3,4]}
我可以像这样将数据输出为JSON:
WITH l AS (SELECT id, my_json as data FROM table)
SELECT to_json(l) FROM l;
我得到:
{"id": 1, "data": {"a": 1, "b": 2, "c": [1,2,3]}}
{"id": 2, "data": {"a": 3, "b": 5, "c": [2,3,4]}}
但是有没有一种方法可以输出以id
为键的数据?
赞:
{"1": {"a": 1, "b": 2, "c": [1,2,3]}}
{"2": {"a": 3, "b": 5, "c": [2,3,4]}}
编辑:
@Silvio Baez的回答使我走上了正确的轨道,我意识到这实际上并不是我真正需要的。
我实际上希望结果是像这样的对象的合并
{
"1": {"a": 1, "b": 2, "c": [1,2,3]},
"2": {"a": 3, "b": 5, "c": [2,3,4]}
}
这可以通过类似的方式实现:
SELECT json_object_agg(id, data::json) FROM table;
答案 0 :(得分:0)
也许您喜欢这种解决方案。它包含使用功能jsonb_build_object (VARIADIC "any")。
示例
CREATE TEMPORARY TABLE json_table (
id integer,
my_json json
);
INSERT INTO json_table (id, my_json) VALUES
(1, '{"a": 1, "b": 2, "c": [1,2,3]}'),
(2, '{"a": 3, "b": 5, "c": [2,3,4]}');
SELECT json_build_object(id,my_json) FROM json_table;
结果
{"1" : {"a": 1, "b": 2, "c": [1,2,3]}}
{"2" : {"a": 3, "b": 5, "c": [2,3,4]}}