在PostgreSQL中将多个JSON行合并到一个JSON对象中
我想将以下来自多行的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
{"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脚本的形式提供示例数据,您将获得更多帮助。