sql - 如何将两个 postgres 列合并为单个值(json 对象)

标签 sql arrays json postgresql

我正尝试在我的 food.list 表上编写查询:

categories    | items
----------------------------
dairy         | ["milk", "cheese"]
fruit         | ["apples", "pears", "grapes"]
vegetables    | ["carrots"]  

并返回一个只有一行的 selected_foods 列。我希望该行的值是一个包含类别(键)列表和项目(值)数组的对象。

selected_foods
------------------------------------
{ 
  dairy: ["milk", "cheese"], 
  fruit: ["apples", "pears", "grapes"], 
  vegetables: ["carrots"] 
}

到目前为止,我已经尝试过:

SELECT json_agg(json_build_object(categories, items::json))::json 
AS selected_foods
FROM food.list

但这会返回一个对象数组,即:

selected_foods
------------------------------------
[ 
  { dairy: ["milk", "cheese"] }, 
  { fruit: ["apples", "pears", "grapes"] }, 
  { vegetables: ["carrots"] }
]

我想我太早应用了 json_build_object 函数......或者我可能需要在之后再次打开它们?

任何帮助都会很棒,谢谢 :)

最佳答案

使用json_object_agg

SELECT json_object_agg( categories, items::json)  as selected_foods
     from list 

DEMO

关于sql - 如何将两个 postgres 列合并为单个值(json 对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56334598/

相关文章:

Python:如何将 { apple: "1", orange: "2"} 解析为字典?

android - Gridview——点击图片在Viewpager中查看图片

sql - 将日期与 Oracle 中的 current_date 进行比较

SQL Azure 不支持 'select into' - 还有其他方法吗?

python - 从 numpy 中对角线下的元素数组创建一个矩阵

java - 在 Java 中查找数组中最接近 32 的数字的索引号

javascript - 我正在进行在线测试,一切都完成了。但我的自动提交计时器不起作用。

sql - 与加入和地点相关的性能

javascript - 子字符串、拆分、字符串到数字和 RGB 到十六进制

json - 使用较旧的 swift 方法“JSONObjectWithData”将数据序列化为 JSON?