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

Extracting key names with true values from JSONB object

我正在尝试将 JSONB 中的 select 键键入 true 值。到目前为止,我设法使用此查询做到了这一点,但我觉得有更好的方法:

SELECT json.key
    FROM jsonb_each_text('{"aaa": true, "bbb": false}'::JSONB) json 
    WHERE json.value = 'true';

我不喜欢的是我比较 stringsWHERE 子句。有没有办法将其转换为 boolean
如果是,它是否也适用于 truthyfalsy 值? (javascript 中 truthyfalsy 值的解释:http://www.codeproject.com/Articles/713894/Truthy-Vs-Falsy-Values-in-JavaScript)。

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 在后台使用相等运算符。