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

PostgreSQL中JSON数据转表格格式的查询语法求助

解决PostgreSQL JSON数组展开为扁平表格的问题

你的问题出在对JSON数组的展开方式错误,原SQL里用unnest(array[data->'attr2'])是不对的——data->'attr2'本身就是JSON数组类型,不能直接转成PostgreSQL数组来unnest,应该用PostgreSQL专门提供的JSON数组展开函数。另外你的SQL还有语法错误:action'多了一个单引号,且data->'attr2'前面漏了逗号。

以下是正确的查询语句,分两种字段类型情况:

情况1:data字段是JSON类型

SELECT
    data->>'attr1' AS attr1,
    attr2_item->>'subattr' AS subattr,
    attr2_item->>'subattr2' AS subattr2,
    data->>'attr3' AS attr3
FROM my_table,
     json_array_elements(data->'attr2') AS attr2_item;

情况2:data字段是JSONB类型(推荐使用JSONB,性能更好)

SELECT
    data->>'attr1' AS attr1,
    attr2_item->>'subattr' AS subattr,
    attr2_item->>'subattr2' AS subattr2,
    data->>'attr3' AS attr3
FROM my_table,
     jsonb_array_elements(data->'attr2') AS attr2_item;

关键说明:

  • json_array_elements(或jsonb_array_elements):专门用于将JSON数组拆分为多行,每一行对应数组中的一个JSON对象,这里我们将拆分后的对象命名为attr2_item。
  • 使用->>而非->:->返回的是JSON类型的值(会带引号),->>直接返回文本类型的值,正好匹配你期望的表格结果格式。
  • 这种写法是PostgreSQL中的隐式连接(LATERAL JOIN的简化形式),会自动将原表的每一行与拆分后的数组行进行关联,保证attr1、attr3和对应的数组元素正确匹配。

执行以上语句后,就能得到你想要的扁平表格结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:26:20