我正在使用Postgres数据库,并有一个表格如下
Table Name: Test
id firstname lastname
1 Sam Crews
2 John Dave
我试图将结果设置回JSON格式以下,但没有运气
预期:
[{"1": {"firstname": "Sam", "lastname": "Crews"}},
{"2": {"firstname": "John", "lastname": "Dave"}}
]
我尝试使用 row_to_json , json_build_object 函数,但输出略有不同(如下所示)。
实际值:
[{"id": "1", "firstname": "Sam", "lastname": "Crews"},
{"id": "2", "firstname": "John", "lastname": "Dave"}
]
非常感谢任何有关如何达到预期结果的指示。
谢谢!
答案 0 :(得分:2)
row_to_json()
将始终使用所有列名称在JSON文档中创建键。如果您只想要两列,则需要明确指定它们。
您还需要一个嵌套的JSON对象,因此您需要嵌套方法来创建一个:
select json_agg(json_build_object(
id,
json_build_object('firstname', firstname, 'lastname', lastname))
)
from the_table;
Klin让我意识到,使用Postgres 9.6,您可以简化firstname / lastname对象的创建:
select json_agg(json_build_object(id, to_jsonb(the_table) - 'id'))
from the_table;
答案 1 :(得分:1)
with my_table(id, firstname, lastname) as (
values
(1, 'Sam', 'Crews'),
(2, 'John', 'Dave')
)
select jsonb_agg(obj)
from my_table,
jsonb_build_object(id, to_jsonb(my_table)- 'id') obj
jsonb_agg
------------------------------------------------------------------------------------------------------
[{"1": {"lastname": "Crews", "firstname": "Sam"}}, {"2": {"lastname": "Dave", "firstname": "John"}}]
(1 row)