Postgres提取由特定列作为键的JSON

时间:2018-09-04 18:15:16

标签: json postgresql

我在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;

1 个答案:

答案 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]}}