我有一个名为props
的jsonb列,如下所示:
{"house_color": "white", "dynamic_properties": [{ "visibility" : "blue" }, { "autonomy" : "self"}]}
现在,我知道如何通过以下方法获得我所有房屋的所有颜色:
select "props"->"house_color" as color
FROM houses
现在,我试图通过在SELECT中执行某种类型的条件来获取所有可见性动态属性,但我陷入了困境。因此,在示例中,我只会得到“蓝色”。我正在寻找类似的东西
select "props"->"dynamic_properties"->"visibility" as color
FROM houses
但是我不知道如何查看该dynamic_properties
数组中的对象。
答案 0 :(得分:0)
WITH jsondata AS (
SELECT '{"house_color": "white", "dynamic_properties": [{ "visibility" : "blue" }, { "autonomy" : "self"}]}'::json as data
)
SELECT
data ->> 'house_color'
FROM jsondata, json_array_elements(data -> 'dynamic_properties') as elem
WHERE elem ->> 'visibility' = 'blue'
json_array_elements
将数组扩展为每个元素一行。因此,在您的示例中,结果为两行。这些行可以按其键/值对进行过滤。