sql - 从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"]
解决方案
用于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)
推荐阅读
- c - xTaskCreate 函数如何不遵循 C 程序方法?
- webrtc - 通过 WebRTC 为 Hololens 2 项目进行视频广播
- javascript - 惰性加载组件中的NG-ZORRO模态组件,关闭按钮销毁事件未触发
- angular8 - 如何以角度 8 向模板显示嵌套对象?
- python - 如何根据列表中的后续字符串将字符串列表转换为两列数据框
- sql-server - 使用 pem 文件、用户名和密码连接到 SQL Server
- php - XML 文件在发送时存储在哪里?
- c++ - C++ 如何实现从类型到类型的编译时映射?
- ruby - Rspec:失败/错误:ActionCable.server.pubsub.redis_connection_for_subscriptions.smembers “在线”
- java - Spring 多个自动装配的单例实例