从POSTGRES中的数组内部的json中选择键

时间:2018-12-19 08:19:59

标签: sql postgresql jsonb

我有一个名为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数组中的对象。

1 个答案:

答案 0 :(得分:0)

demo:db<>fiddle

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将数组扩展为每个元素一行。因此,在您的示例中,结果为两行。这些行可以按其键/值对进行过滤。