首页 > 解决方案 > 在postgres中将2列表转换为json对象

问题描述

我有一张表,代表亲戚之间的关系。

name1relationshipname2

name1 | name2 | relationship
-----------------------------
"Joe" | "Mary"| "uncle"
"Sue" | "Mary"| "mother" 
etc. 

有一个 People 表,其中 name 是主键。

我想查询 allMary的关系并将结果作为 JSON 对象返回,其中键是对方的姓名,值是关系。

例子:

{
    "Joe": "uncle",
    "Sue": "mother"
}

假设: Mary 只会出现在 name2 行中。您与任何其他人的关系不能超过 1 次。

我尝试了 json_build_object 和 row_to_json 之类的东西,但我似乎无法让数据呈现正确的形状。

我需要什么查询才能实现这一目标?

以前有没有其他人这样做过?

在此先感谢您的帮助。

标签: jsonpostgresql

解决方案


您正在寻找json_object_agg功能。请参阅有关聚合函数的文档

SELECT json_object_agg(name1, relationship) FROM relatives WHERE name2 = 'Mary';

            json_object_agg
---------------------------------------
 { "Joe" : "uncle", "Sue" : "mother" }

推荐阅读