我可以从 Postgres 中选择行作为 JSON,例如
select row_to_json(t)
from (
select id, name from accounts
) t
Run Code Online (Sandbox Code Playgroud)
它以这种格式返回每一行:
{"id":6001,"name":"Foo"}
Run Code Online (Sandbox Code Playgroud)
我想以这种格式获取它们:
{ 6001: {"name":"Foo"} }
Run Code Online (Sandbox Code Playgroud)
这可能吗?
编辑:
这将为我提供一行的正确格式:
select json_build_object(id,json_build_object('name',name)) from accounts
Run Code Online (Sandbox Code Playgroud)
但是我最终想要的是由键索引的单个散列中的所有行,例如
{
6001: {"name":"Foo"},
6002: {"name":"Bar"},
6003: {"name":"Baz"},
}
Run Code Online (Sandbox Code Playgroud)
这让我更接近:
select array_to_json(array_agg(json_build_object(id,json_build_object('name',name))))
from accounts
Run Code Online (Sandbox Code Playgroud)
但它仍然不完全存在,产生了一个哈希数组:
[
{ 6001: {"name":"Foo"} },
{ 6002: {"name":"Bar"} },
{ 6003: {"name":"Baz"} },
]
Run Code Online (Sandbox Code Playgroud)
您正在尝试聚合,因此请使用聚合函数json_object_agg(),该函数“将名称/值对聚合为 JSON 对象”。这id是你的钥匙,你可以用它创造的价值json_build_object():
select json_object_agg(id, json_build_object('name', name))
from accounts
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1944 次 |
| 最近记录: |