如何在PostgreSQL中将查询结果转换为单个JSON数组对象
解决方案
你只需要在外层再套一层json_agg聚合函数即可,修改后的完整查询语句如下:
SELECT json_agg(row_to_json(r)) AS result_json_array FROM ( select ff.*, json_agg(ffo."option") as options from form_field ff, form_field_options ffo where ffo.form_field_id = ff.id and ff.form_id = 'fef5c7e0-170c-4556-80d2-42e3db66cfa2' group by ff.id ) r
- 原查询中
row_to_json(r)会为子查询返回的每一行生成独立的JSON对象,在外层使用json_agg聚合函数,即可将所有独立JSON对象合并为你需要的[{...}, {...}]格式的JSON数组。 - 如果需要使用PostgreSQL推荐的高性能JSONB类型,可以对应替换为
jsonb_agg(to_jsonb(r)),使用体验完全一致,后续做JSON操作的性能更好。 - 若需要指定数组内元素的排序规则,可以在
json_agg内添加ORDER BY语句,例如json_agg(row_to_json(r) ORDER BY r.id ASC)即可按表单字段ID升序排列数组元素。
内容的提问来源于stack exchange,提问作者DangTri
相关产品推荐
相关产品推荐

