如何从 PostgreSQL 中的 JSONB 数组中获取特定对象的值?

Posted

技术标签:

【中文标题】如何从 PostgreSQL 中的 JSONB 数组中获取特定对象的值?【英文标题】:How to get specific objects value from JSONB array in PostgreSQL? 【发布时间】:2020-02-12 13:11:58 【问题描述】:

我有一个名为 people 的列,它的类型是 JSONB

这是示例数据(1 行):

"addresses": ["street":"cubuklu", "valid?": "true" 
               "street":"beykoz", "valid?":"false"
               "street":"kavacik", "valid?": "true" ]

我想获取具有valid? true所有行的街道列表。

结果:

cubuklu
kavacik
......(data from other rows)

我可以列出无法过滤值的数组。

【问题讨论】:

【参考方案1】:

您需要取消嵌套数组,然后过滤结果:

select adr.address ->> 'street'
from the_table t
  cross join jsonb_array_elements(t.people -> 'addresses') as adr(address)
where adr.address ->> 'valid?' = 'true'

【讨论】:

以上是关于如何从 PostgreSQL 中的 JSONB 数组中获取特定对象的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用PostgreSQL中的JSONB数据类型

如何在 Postgresql 中对 JSONB 数组中的值求和?

如何将 JSON 对象推送到 postgresql 中 jsonb 列中的数组

单个 postgresql 查询中的文本和 jsonb 连接

如何使用PostgreSQL中的JSONB数据类型

如何逃脱? (问号)运算符在 Rails 中查询 Postgresql JSONB 类型