Dev*_*tam 1 postgresql json postgresql-9.5
我想将多行中的以下 JSON 组合成一个单一的 JSON 对象作为一行。
{"Salary": ""}
{"what is your name?": ""}
{"what is your lastname": ""}
Run Code Online (Sandbox Code Playgroud)
预期输出
{
"Salary": "",
"what is your name?": "",
"what is your lastname": ""
}
Run Code Online (Sandbox Code Playgroud)
仅使用内置函数,您需要将行扩展为键/值对并将其聚合回单个 JSON 值:
select jsonb_object_agg(t.k, t.v)
from the_table, jsonb_each(ob) as t(k,v);
Run Code Online (Sandbox Code Playgroud)
如果您的列是类型json而不是jsonb您需要强制转换它:
select jsonb_object_agg(t.k, t.v)
from the_table, jsonb_each(ob::jsonb) as t(k,v);
Run Code Online (Sandbox Code Playgroud)
一个稍微优雅的解决方案是定义一个新的聚合来做到这一点:
CREATE AGGREGATE jsonb_combine(jsonb)
(
SFUNC = jsonb_concat(jsonb, jsonb),
STYPE = jsonb
);
Run Code Online (Sandbox Code Playgroud)
然后你可以直接聚合这些值:
select jsonb_combine(ob)
from the_table;
Run Code Online (Sandbox Code Playgroud)
(同样,如果它json不是,则您需要投射您的专栏jsonb)
| 归档时间: |
|
| 查看次数: |
2052 次 |
| 最近记录: |