gpt4 book ai didi

json - Postgres json_object。仅当值不为空时才添加 json 字段

转载 作者:行者123 更新时间:2023-11-29 11:53:32 24 4
gpt4 key购买 nike

我正在使用 jsob_build_object 函数从我的表中的数据生成 json。

select json_build_object('name', p.name, 'birthday', p.birthday)
FROM Person p limit 2

结果是:

{"name":"John", "birthday", "2000-01-01"}
{"name":"George", "birthday", "null"}

现在您可以在第二行中看到 birthday 为空。在那种情况下,我希望 JSON 字段(生日)不存在,因此结果将是:

{"name":"John", "birthday", "2000-01-01"}
{"name":"George"}

这可能吗?

最佳答案

使用json_strip_nulls()

select json_strip_nulls(json_build_object('name', p.name, 'birthday', p.birthday))
FROM person p
limit 2;

编辑 1(问题扩展后)

如果你想有条件地这样做,你可以用 jsonb 来做(因为它支持 || 运算符)

select jsonb_build_object('name', p.name) || jsonb_strip_nulls(jsonb_build_object('birthday', p.birthday))
from person p;

编辑 2(在公开 Postgres 版本之后)

如果您仅限于旧版本的 Postgres,则需要使用条件表达式,如果列不为空,则仅连接 JSON 对象:

select jsonb_build_object('name', p.name) 
|| case
when birthday is null then '{}'::jsonb
else jsonb_build_object('birthday', p.birthday)
end
from person p;

关于json - Postgres json_object。仅当值不为空时才添加 json 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48538275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com