PostgreSQL如何将表行的每列转换为独立JSON对象组成的数组
解法1:手动指定列名(性能最优,适合列固定的场景)
直接通过jsonb_build_object为每个属性单独构造JSON对象,再用jsonb_build_array拼接为数组即可:
SELECT jsonb_build_array( jsonb_build_object('attribute1', attribute1), jsonb_build_object('attribute2', attribute2), jsonb_build_object('attribute3', attribute3) ) AS target_json FROM itemmaster WHERE id = 1;
执行后得到的结果就是你需要的[{"attribute1":"Good"},{"attribute2":"Average"},{"attribute3":"Best"}]格式。
解法2:动态适配列(无需硬编码列名,适合列多/列易变动的场景)
如果属性列数量多,或者后续可能新增属性,可以用行转列+聚合的方式自动适配,自动排除不需要的id字段:
SELECT jsonb_agg(jsonb_build_object(key, value)) AS target_json FROM itemmaster i -- to_jsonb(i)将整行转为JSON对象,- 'id'移除不需要的id字段 CROSS JOIN jsonb_each_text(to_jsonb(i) - 'id') WHERE id = 1;
如果你使用的是PostgreSQL 10及以下版本,把jsonb相关函数替换为json对应函数(json_build_array/json_build_object/json_each_text/json_agg)即可得到相同效果。
内容的提问来源于stack exchange,提问作者Devender Sharma
相关产品推荐
相关产品推荐

