postgres将多行放入一个json对象中

pn9klfpd  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(270)

我有一个users表,它的列如下 id , name , email ,等等。我想在单个json对象中以以下格式检索某些用户的信息:

{
    "userId_1" : {"name" : "A", "email": "A@gmail.com"},
    "userId_2" : {"name" : "B", "email": "B@gmail.com"}
}

其中用户是唯一的 id 是键,包含其信息的json是其对应的值。
我可以在两个单独的行中使用 json_build_object 但我希望它以一个json对象的形式出现在一行中。

brc7rcf0

brc7rcf01#

您可以使用json聚合函数:

select jsonb_object_agg(id, to_jsonb(t) - 'id') res
from mytable t
``` `jsonb_object_agg()` 将键/值对聚合到单个对象中。关键是 `id` 值是由表中除 `id` .
db小提琴演示
样本数据:
idnameemail
userid_1AA@gmail.com
userid_2BB@gmail.com
结果:
res
{"userid_1": {"name": "A", "email": "A@gmail.com"}, "userid_2": {"name": "B", "email": "B@gmail.com"}}
jm81lzqq

jm81lzqq2#

试试看-

select row_to_json(col) from T

下面的链接可能会有所帮助https://hashrocket.com/blog/posts/faster-json-generation-with-postgresql

55ooxyrt

55ooxyrt3#

试试这个:
从(select id,json\u build\u object('name',name,'email',email)中选择json\u object(array\u agg(id),array\u agg(json::text))作为json from users\u table)一些\u别名\u name
如果您的id不是文本类型,那么您也必须将其转换为文本。

相关问题