在PostgreSQL中将多个JSON行合并到一个JSON对象中

在PostgreSQL中将多个JSON行合并到一个JSON对象中,json,postgresql,postgresql-9.5,Json,Postgresql,Postgresql 9.5,我想将以下来自多行的JSON组合成一个JSON对象作为一行 {"Salary": ""} {"what is your name?": ""} {"what is your lastname": ""} 预期产出 { "Salary": "", "what is your name?": "", "what is your lastname": "" } 如果只使用内置函数,则需要将行扩展为键/值对,并将其聚合回单个JSON值: select jsonb_object_agg(t

我想将以下来自多行的JSON组合成一个JSON对象作为一行

{"Salary": ""}
{"what is your name?": ""}
{"what is your lastname": ""}
预期产出

{
  "Salary": "",
  "what is your name?": "",
  "what is your lastname": ""
}

如果只使用内置函数,则需要将行扩展为键/值对,并将其聚合回单个JSON值:

select jsonb_object_agg(t.k, t.v)
from the_table, jsonb_each(ob) as t(k,v);
如果列的类型为
json
而不是
jsonb
,则需要强制转换它:

select jsonb_object_agg(t.k, t.v)
from the_table, jsonb_each(ob::jsonb) as t(k,v);
一个稍微优雅一点的解决方案是定义一个新的聚合:

CREATE AGGREGATE jsonb_combine(jsonb) 
(
    SFUNC = jsonb_concat(jsonb, jsonb),
    STYPE = jsonb
);
然后可以直接聚合这些值:

select jsonb_combine(ob)
from the_table;
(如果列是
json
而不是
jsonb
,则需要再次强制转换)


仅使用内置函数,您需要将行扩展为键/值对,并将其聚合回单个JSON值:

select jsonb_object_agg(t.k, t.v)
from the_table, jsonb_each(ob) as t(k,v);
如果列的类型为
json
而不是
jsonb
,则需要强制转换它:

select jsonb_object_agg(t.k, t.v)
from the_table, jsonb_each(ob::jsonb) as t(k,v);
一个稍微优雅一点的解决方案是定义一个新的聚合:

CREATE AGGREGATE jsonb_combine(jsonb) 
(
    SFUNC = jsonb_concat(jsonb, jsonb),
    STYPE = jsonb
);
然后可以直接聚合这些值:

select jsonb_combine(ob)
from the_table;
(如果列是
json
而不是
jsonb
,则需要再次强制转换)

请不要将样本数据作为图像发布。如果您使用
创建表
插入到
语句以格式化文本的形式提供示例数据,或者更好地以小SQL脚本的形式提供示例数据,您将获得更多帮助。请不要将示例数据作为图像发布。如果您使用
create table
insert-into
语句以格式化文本的形式提供示例数据,或者更好地以小SQL脚本的形式提供示例数据,您将获得更多帮助。