在使用jsonb
和Postgres时,我遇到了以下问题:
我的输出看起来像这样:[ {columnName: {}}, { columnName: {} } ]
但我希望它看起来像这样:[ {}, {} ]
我想把所有的对象放在一个jsonb
数组中,但不添加列名。
下面是基本查询,可以在下面的fiddle中看到:http://sqlfiddle.com/#!17/b701 b8/2
我注意到当使用array_agg()
时,列名没有被添加,但是使用JSON时,它们会被添加。如何删除列名,以便我可以使用JSON获得所需的输出?
select json_agg(v)
from (
select json_build_object('pos',pos, 'type',type, 'color',color)
from (select * from images)a
union all
select json_build_object('pos',pos, 'type',type, 'value',value)
from (select * from letters)b
)v
字符串
2条答案
按热度按时间xhv8bpkk1#
聚合列而不是整行:
字符串
值得注意的是,您的查询生成
json
,而不是jsonb
。嵌套整行时更简单:
型
类似于**
jsonb
**(其中白空间不是问题)型
fiddle
参见:
sqougxex2#
如果这两个表的列类型确实匹配,则可以通过标记行并在聚合位置构建
jsonb
来缩短查询:demo at db<>fiddle字符串
| jsonb_agg|
| --|
| [{“pos”:0,“type”:“image”,“color”:“red”},{“pos”:1,“type”:“image”,“color”:“blue”},{“pos”:2,“type”:“text”,“value”:“book”}]|