首页 > 解决方案 > 在 Postgres 11 数据库中展平类似 JSON 的数据

问题描述

我在 Postgres 表中有以下数据需要展平:

data
===============================================================================================
{"Exterior Lights" :["Headlights - Forward Adaptive","Headlights - Laser","Headlights - LED"]}
{"Generic" : ["Launch Control"]} 
{"Mirror" :["Blind Spot Assistant","Door Mirrors - Integrated LED"]}
{"Safety" :["Tyre Pressure Monitoring", "ABS"]}

理想情况下,上面的数据看起来像这样:

System                             Type
=======                            ====
Exterior Lights                    Headlights - Forward Adaptive
Exterior Lights                    Headlights - Laser
Exterior Lights                    headlights - LED
Generic                            Launch Control
Mirror                             Blind Spot Assistant
Mirror                             Door Mirror - Integrated LED
Safety                             Tyre Pressure Monitor 
Safety                             ABS

我尝试了 JSON 运算符的各种组合,但无济于事。任何人都可以帮忙吗?

标签: jsonpostgresql

解决方案


您需要首先将键/值对提取为行,这可以使用jsonb_each(). 然后您可以使用jsonb_array_elements_text()为每个数组元素创建一行:

select x.system, u.type
from the_table t
  cross join jsonb_each(t.data) as x(system, value)
  cross join jsonb_array_elements_text(x.value) as u(type);

在线示例


推荐阅读