You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 11数据库中JSON数据扁平化处理技术求助

解决PostgreSQL 11中JSON数据扁平化的问题

没问题,这个需求在PostgreSQL 11里可以通过组合内置的JSON函数轻松实现,下面是具体的解决方案:

假设你的表结构

假设你的表名为vehicle_features,存储JSON数据的字段名为feature_data(类型为json),表中每行是你提供的单个JSON对象,比如:

CREATE TABLE vehicle_features (feature_data json);
INSERT INTO vehicle_features VALUES
('{"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"]}');

实现扁平化的SQL语句

执行下面的SQL就能得到你期望的输出格式:

SELECT
    key AS "System",
    json_array_elements_text(value) AS "Type"
FROM
    vehicle_features,
    json_each(feature_data);

语句解释

  1. json_each(feature_data):这个函数会把每行的JSON对象拆分为键值对行,其中key就是你需要的System名称(比如"Exterior Lights"),value则是对应的JSON数组。
  2. json_array_elements_text(value):这个函数会把JSON数组中的每个元素展开为单独的行,和对应的key(System)关联,最终得到每行一个System+Type的结构。

如果字段是jsonb类型

如果你的JSON字段类型是jsonb(PostgreSQL中更推荐使用jsonb),只需要把函数换成jsonb_each和jsonb_array_elements_text即可:

SELECT
    key AS "System",
    jsonb_array_elements_text(value) AS "Type"
FROM
    vehicle_features,
    jsonb_each(feature_data);

执行以上语句后,输出结果就会和你期望的完全一致:

SystemType
Exterior LightsHeadlights - Forward Adaptive
Exterior LightsHeadlights - Laser
Exterior LightsHeadlights - LED
GenericLaunch Control
MirrorBlind Spot Assistant
MirrorDoor Mirrors - Integrated LED
SafetyTyre Pressure Monitoring
SafetyABS

内容的提问来源于stack exchange,提问作者user2699504

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:32:52