在postgresql中将一行json合并为一个单独的json



我在每行中都有一个JSON列,如下所示

"{"car":12}"

"{"bike":9}"

如何使它成为一排像这个

{"car":12, "bike":9}

如果您不想要一个数组作为结果,则需要创建自己的聚合函数:

create aggregate jsonb_merge_agg(jsonb) 
(
sfunc = jsonb_concat(jsonb, jsonb),
stype = jsonb
);

然后你可以这样使用它:

select jsonb_merge_agg(the_column)
from the_table;

如果你有多个具有相同键的值;最后一个";将覆盖以前的所有。

在线示例

对我之前的错误感到抱歉。

你可以这样做:

with data (jcol) as (
values ('{"car": 12}'::jsonb), ('{"bike":9}')
)
select jsonb_object_agg(k, v) 
from data 
cross join lateral jsonb_each(jcol) as j(k,v);
jsonb_object_agg    
------------------------
{"car": 12, "bike": 9}
(1 row)

最新更新