在Postgres中将布尔字段从JSONB对象转换为普通bool类型的最佳方法是什么?
例如,我有一个JSON对象{"foo": true}
,我可以在Postgresql中使用它。例如:select ('{"foo": true}'::jsonb);
给了我一些类型JSONB。
现在我想将foo
字段提取为布尔值。如果我这样做:
select ('{"foo": true}'::jsonb)->'foo';
我找回JSONB类型的东西。
但是,我无法将JSONB转换为布尔值。如果不是我做的话:
select ('{"foo": true}'::jsonb)->>'foo';
我会找回类型字符串的东西。从那我可以转换为布尔值。 (延续:)
select (('{"foo": true}'::jsonb)->>'foo')::bool;
但是从内部表示到字符串,然后再回到另一个内部表示,这似乎有点蠢。
有没有直接去布尔?
我当前最好的工作似乎是:
select (('{"foo": true}'::jsonb)->'foo') = 'true'::jsonb;
但这似乎也有点不对。
答案 0 :(得分:3)
您可以使用json_to_record
:
select foo
from json_to_record('{"foo": true}') as x(foo bool);
我不确定这是否真的能为你节省内部演员阵容,但这是我在9.4中最接近的事情