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

时间:2019-05-28 03:26:53

标签: 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 函数...还是在以后需要重新包装它们?

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

1 个答案:

答案 0 :(得分:2)

使用json_object_agg

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

DEMO