我可以从Postgres中选择行作为JSON,例如
select row_to_json(t)
from (
select id, name from accounts
) t
以此格式返回每一行:
{"id":6001,"name":"Foo"}
我想以这种格式获取它们:
{ 6001: {"name":"Foo"} }
这可能吗?
编辑:
这将为我提供一行的正确格式:
select json_build_object(id,json_build_object('name',name)) from accounts
但我最终追求的是用密钥索引的单个哈希中的所有行,例如
{
6001: {"name":"Foo"},
6002: {"name":"Bar"},
6003: {"name":"Baz"},
}
这让我更接近:
select array_to_json(array_agg(json_build_object(id,json_build_object('name',name))))
from accounts
但它仍然不存在,产生一系列哈希:
[
{ 6001: {"name":"Foo"} },
{ 6002: {"name":"Bar"} },
{ 6003: {"name":"Baz"} },
]
答案 0 :(得分:3)
您正在尝试聚合,因此请使用the aggregate function json_object_agg()
,其中"将名称/值对聚合为JSON对象"。 id
是您的密钥,您可以使用json_build_object()
创建的值:
select json_object_agg(id, json_build_object('name', name))
from accounts
答案 1 :(得分:0)
也许是这样的:
select json_build_object(id,json_build_object('name',name)) from accounts
http://www.postgresql.org/docs/9.4/static/functions-json.html