如何去除Postgres聚合JSON数组元素的列名
解决PostgreSQL json_agg带列名的问题
你的问题根源在于json_agg(v)是把整个行对象转成JSON,所以每个元素都会被包裹在以默认列名为键的对象里。要得到不带列名的JSON数组,有两种简单方法:
方法1:给子查询的JSON列起别名后聚合
给每个json_build_object的结果指定别名,然后聚合这个别名即可:
select json_agg(v.obj) from ( select json_build_object('pos',pos, 'type',type, 'color',color) as obj from images union all select json_build_object('pos',pos, 'type',type, 'value',value) as obj from letters )v
方法2:直接聚合行内的唯一列
如果不想额外加别名,用v.*提取行里的唯一列值,再聚合:
select json_agg(v.*) from ( select json_build_object('pos',pos, 'type',type, 'color',color) from images union all select json_build_object('pos',pos, 'type',type, 'value',value) from letters )v
两种方法都能得到你想要的[ {}, {} ]格式输出,区别只是是否显式给列起别名。
内容的提问来源于stack exchange,提问作者Kdigital
相关产品推荐
相关产品推荐

