PostgreSQL 如何将表两列转为键值对生成单个JSON对象
问题修正方案
原有查询得到数组结果的原因是:jsonb_agg会将传入的多行JSON值聚合为JSON数组,你逐行构造单键JSON对象的写法,最终必然得到数组结构,和单对象的需求不匹配。
直接使用PostgreSQL专为键值对聚合设计的jsonb_object_agg函数即可:
SELECT jsonb_object_agg(repliesto, devicetokens) FROM devices;
实际输出验证
针对你给出的样例表数据,上述语句的返回结果完全匹配目标格式:
{"user1": ["a"], "user2": ["b","c"]}
函数会自动完成PostgreSQL数组类型到JSON数组的转换,不需要额外编写类型适配逻辑。
边界场景处理
如果设备表没有任何数据,上述语句会返回null。如果需要空表场景下返回空JSON对象作为兜底,可以调整语句为:
SELECT COALESCE(jsonb_object_agg(repliesto, devicetokens), '{}'::jsonb) FROM devices;
内容的提问来源于stack exchange,提问作者sudoExclamationExclamation
相关产品推荐
相关产品推荐

