如何在Postgresql中将JSONB值转换为boolean?

ben*_*nno 9 postgresql json

在Postgres中将布尔字段从JSONB对象转换为普通bool类型的最佳方法是什么?

例如,我有一个JSON对象{"foo": true},我可以在Postgresql中使用它.例如:select ('{"foo": true}'::jsonb);它给了我一些类型JSONB.

现在我想将foo字段提取为布尔值.如果我做:

select ('{"foo": true}'::jsonb)->'foo';
Run Code Online (Sandbox Code Playgroud)

我得到了JSONB类型的东西.

但是,我无法将JSONB强制转换为布尔值.如果不是我做的:

select ('{"foo": true}'::jsonb)->>'foo';
Run Code Online (Sandbox Code Playgroud)

我会找回类型字符串的东西.从那我可以转换为布尔值.(例如:)

select (('{"foo": true}'::jsonb)->>'foo')::bool;
Run Code Online (Sandbox Code Playgroud)

但是从内部表示到字符串,然后再回到另一个内部表示,这似乎有点蠢.

有没有直接去布尔?

我目前最好的工作似乎是:

select (('{"foo": true}'::jsonb)->'foo') = 'true'::jsonb;
Run Code Online (Sandbox Code Playgroud)

但这似乎有点不对劲.

Sea*_*ira 4

您可以使用json_to_record

select foo
from json_to_record('{"foo": true}') as x(foo bool);
Run Code Online (Sandbox Code Playgroud)

我不确定这是否真的可以为您节省任何内部转换,但这是我所知道的 9.4 中最接近的事情