当我尝试格式化()一个postgresql布尔值并将值转换为jsonb对象时,PostgreSQL引发了一个异常:
# select format('%s', true)::jsonb;
ERROR: invalid input syntax for type json
DETAIL: Token "t" is invalid.
CONTEXT: JSON data, line 1: t
我很确定格式化布尔值给出t或f而不是完整的单词,这是json所期望的 .
通过使用case语句已经有了解决方案
select format('%s', case when true then 'true' else 'false' end)::jsonb;
format
--------
true
(1 row)
然而,虽然这对于上面的微不足道的情况看起来似乎不错,但是当它用在函数中时,任何更复杂的东西看起来都很不合适 . 这有更简洁的解决方案吗?
上下文是我有一个函数返回键映射到布尔标志的哈希值,这是由函数决定的 . 一个函数可能看起来像的样本
return format( '{
"is_valid" : %s,
"is_authorized" : %s,
"is_not_delegated" : %s,
}',
is_valid(function_argument),
is_authorized(function_argument),
not is_delegated(function_argument)
)::jsonb;
1 回答