Postgresql 从JSONB对象中提取具有真值的键名

Postgresql 从JSONB对象中提取具有真值的键名,postgresql,jsonb,Postgresql,Jsonb,我正在尝试从JSONB中选择键,并键入true值。到目前为止,我使用这个查询成功地做到了这一点,但我觉得有更好的方法: SELECT json.key FROM jsonb_each_text('{"aaa": true, "bbb": false}'::JSONB) json WHERE json.value = 'true'; 我不喜欢比较字符串的WHERE子句。是否有方法将其强制转换为布尔值? 如果是,它是否也适用于truthy和falsy值?(解释javascript

我正在尝试从
JSONB
中选择键,并键入
true
值。到目前为止,我使用这个查询成功地做到了这一点,但我觉得有更好的方法:

SELECT json.key
    FROM jsonb_each_text('{"aaa": true, "bbb": false}'::JSONB) json 
    WHERE json.value = 'true';
我不喜欢比较字符串的
WHERE
子句。是否有方法将其强制转换为布尔值?

如果是,它是否也适用于
truthy
falsy
值?(解释javascript中的
truthy
falsy
值:)

jsonb
有一个相等运算符(
=
;不同于
json
),因此您可以编写

SELECT key
FROM   jsonb_each('{"aaa": true, "bbb": false}')
WHERE  value = jsonb 'true'
(使用
jsonb_each_text()
您依赖于一些JSON值的文本表示)

如果需要,您甚至可以包括一些附加值:

WHERE  value IN (to_jsonb(TRUE), jsonb '"true"', to_jsonb('truthy'))

中的
使用引擎盖下的相等运算符。

jsonb
有一个相等运算符(
=
;与
json
不同),因此您可以编写

SELECT key
FROM   jsonb_each('{"aaa": true, "bbb": false}')
WHERE  value = jsonb 'true'
(使用
jsonb_each_text()
您依赖于一些JSON值的文本表示)

如果需要,您甚至可以包括一些附加值:

WHERE  value IN (to_jsonb(TRUE), jsonb '"true"', to_jsonb('truthy'))

IN
在引擎盖下使用相等运算符。

jsonb
有一个相等运算符(
=
;不同于
json
),因此您可以从jsonb_each(…)json编写
,其中json.value=jsonb'true'
(使用
jsonb_each_text()
您依赖于一些json值的文本表示).
jsonb
有一个相等运算符(
=
;不同于
json
),因此您可以从jsonb_each(…)json编写
,其中json.value=jsonb'true'
(使用
jsonb_each_text()
您依赖于一些json值的文本表示)。