如何在不丢失列名的情况下创建行,以输入row_to_json?

问题描述 投票:0回答:1

我想使用row_to_json(row)函数直接在数据库中创建一个JSON对象。这按预期工作:

select row_to_json(country) from country

它返回如下内容:

[
    {"identifier": 1234, "name": "US"},
    {"identifier": 5678, "name": "France"},
    ....
]

但是,在手动创建行时,我会丢失列名。例如,以下查询:

select row_to_json(row(country.identifier, country.name)) from country

得到:

[
    {"f1": 1234, "f2": "US"},
    {"f1": 5678, "f2": "France"},
    ....
]

此构造丢失列名称。我的输出中需要这些列名。

我找到了一个解决方案

with country as (select identifier, name from country)
select row_to_json(country) from country

有没有办法直接这样做 - 也就是说,没有CTE?

sql json postgresql
1个回答
1
投票

您可以使用派生表:

select row_to_json(t)
from (
  select identifier, name 
  from country
) t

或者你可以使用json_build_object(),但这需要重复列名:

select json_build_object('identifier', identifier, 'name', name)
from country
© www.soinside.com 2019 - 2024. All rights reserved.