当我尝试格式化()一个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;
答案 0 :(得分:0)
select
row_to_json(q)
from (
select
true is_valid,
false is_authorized
) q
答案 1 :(得分:0)
您可以像 my_column::text 一样使用从布尔值到文本的强制转换
select format('{"level":%s,"cluster":%s}', rl.level, rl.cluster::text)