我使用jsob_build_object函数从我表中的数据生成json。
{"name":"John", "birthday", "2000-01-01"}
{"name":"George", "birthday", "null"}
结果是:
{"name":"John", "birthday", "2000-01-01"}
{"name":"George"}
现在你可以在第二行看到生日是空的。在这种情况下,我希望JSON字段(生日)不在那里,所以结果将是:
{{1}}
有可能吗?
答案 0 :(得分:4)
使用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,则需要使用条件表达式,如果列不为null,则只连接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;