首页 文章

Postgresql格式函数的布尔值转换为jsonb

提问于
浏览
1

当我尝试格式化()一个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 回答

  • 0
    select 
        row_to_json(q)
    from (
        select 
            true is_valid,
            false is_authorized
    ) q
    

相关问题