繁体   English   中英

从PostgreSQL上的JSON数组中的每个JSON查询值

[英]Query values from each json in a json array on postgresql

我数据库中的每个记录都有一个json列表,我试图从该列表中返回每个元素内的值。

我想回来

environmental services, energy & utilities

[
  {
    "key": "environmental services"
  },
  {
    "key": "energy & utilities"
  }
]

和。

construction

[
  {
    "key": "construction"
  }
]

每个记录中每个json列表的长度不确定。

我可以通过以下方法获得第一个值:

select
  column_name -> 0 -> 'key'
from table

但是如何获得全部。

我如何在Postgresql中做到这一点?

在横向连接中使用函数jsonb_array_elements()来获取数组的所有元素以及聚合函数string_agg()

with my_table(json_col) as (
values
('[
  {
    "key": "environmental services"
  },
  {
    "key": "energy & utilities"
  }
]'::jsonb),
('[
  {
    "key": "construction"
  }
]')
)

select string_agg(value->>'key', ', ')
from my_table
cross join jsonb_array_elements(json_col)
group by json_col       -- use PK here (if exists)

                 string_agg                 
--------------------------------------------
 environmental services, energy & utilities
 construction
(2 rows)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM