首页 > 解决方案 > 从postgresql中的jsonb数组中获取元素作为平面字符串

问题描述

我有一个数据类型为 jsonb 的列 x

值看起来像:

[
{"key": "6cd", "type": "text1", "label": "label_text_1", "content": "description"},
{"key": "815", "type": "text2", "label": "label_text_2", "content": "desc2"}
]

如何使用 Postgres 查询返回包含所有元素的字符串数组?

像这样的东西:

["6cd", "text1","label_text_1","description","815","text2","label_text_2","desc2"]

标签: sqlarrayspostgresqljsonb

解决方案


用于jsonb_array_elements(json_column)获取数组元素并jsonb_each_text(elem)获取这些元素中所有嵌套对象的值:

with my_table(id, json_column) as (
values(
    1, 
    '[
        {"key": "6cd", "type": "text1", "label": "label_text_1", "content": "description"},
        {"key": "815", "type": "text2", "label": "label_text_2", "content": "desc2"}
    ]'::jsonb)
)

select id, array_agg(val)
from my_table
cross join jsonb_array_elements(json_column) as a(elem)
cross join jsonb_each_text(elem) as e(key, val)
group by id

 id |                             array_agg                             
----+-------------------------------------------------------------------
  1 | {6cd,text1,label_text_1,description,815,text2,label_text_2,desc2}
(1 row) 

推荐阅读