Postgres选择json哈希

时间:2015-04-09 17:29:49

标签: json postgresql

我可以从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"} },
]

2 个答案:

答案 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