使用JSONB对象中的true值提取键名

时间:2016-01-21 10:12:12

标签: postgresql jsonb

我正在尝试从JSONB类型中选择具有true值的键。到目前为止,我设法使用此查询,但我觉得有更好的方法:

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

我不喜欢的是WHERE子句,我正在比较strings。有没有办法将它投射到boolean
如果是,它是否也适用于truthyfalsy值? (javascript中对truthyfalsy值的解释:http://www.codeproject.com/Articles/713894/Truthy-Vs-Falsy-Values-in-JavaScript)。

1 个答案:

答案 0 :(得分:2)

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使用了底层的相等运算符。