2015-09-16 28 views
1

當我嘗試格式化()一個PostgreSQL布爾值,數值轉換爲jsonb對象布爾值的PostgreSQL的格式化功能和PostgreSQL拋出一個異常:轉換爲jsonb

# 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
select 
    row_to_json(q) 
from (
    select 
     true is_valid, 
     false is_authorized 
) q 
+2

請考慮增加一些細節,你的答案。 –