如何遍历jsonb对象数组以获取对象Postgres中的键值

时间:2016-12-28 01:52:05

标签: json postgresql jsonb

我正在使用Postges 9.4,我有一个表jsonb字段作为对象数组。

以下是示例字段:

[{"pk": 224, "arbitrary_value": 50, "description": "United States"}, {"pk": 125, "arbitrary_value": 10, "description": "Canada"}]

在此数组字段中,有两个对象。但它是一个可变长度。

我有一个如下所示的查询:

select jsonb
     , array_agg( ... )
from public.jsonb_data

array_agg(...)列中,我需要能够返回pk字段的EACH对象中包含的jsonb值数组。

结果集应如下所示:

| jsonb | array_agg |
| ----- | --------- |
| [{"pk": 224, "arbitrary_value": 50, "description": "United States"}, {"pk": 125, "arbitrary_value": 10, "description": "Canada"}] | {224,125} |

很抱歉,不知道如何在此编辑器中制作表格

我已经尝试过使用Postgres 9.4中提供的各种jsonb运算符,但如果有人拥有它们,我想要任何指针。

1 个答案:

答案 0 :(得分:3)

尤里卡!

我使用jsonb_to_recordset()函数找到了它。

以下是我的查询:

select primary_key
    , array_agg(e.pk)
from public.jsonb_data, jsonb_to_recordset(jsonb_field) as e( pk int )
group by primary_key
order by primary_key

这给了我一个完美的输出:

| Primary Key | jsonb_array |
| ----------- | ----------- |
| 1           | {224,152}   |
| 2           | {224,186}   |
| 3           | {224}       |

希望这有助于某人...