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

PostgreSQL 9.6.1:如何展开JSON数组并显示元素顺序

解决PostgreSQL中JSON数组拆分行并保留元素顺序的问题

嘿,这个需求用PostgreSQL自带的工具就能完美搞定!针对你的场景,我们可以用json_array_elements()结合WITH ORDINALITY子句实现,完全适配PostgreSQL 9.6.1版本。

具体SQL查询代码

SELECT
    bt.id,
    elem.ordinality AS "order",
    elem.value AS json_object
FROM
    base_table bt,
    json_array_elements(bt.json_array) WITH ORDINALITY AS elem;

代码说明

  • json_array_elements(bt.json_array):这个函数会把json_array列里的JSON数组拆分成单独的JSON对象行,每一行对应数组里的一个元素。
  • WITH ORDINALITY:这是实现顺序标记的关键!它会给拆分出的每一行自动添加一个ordinality列,值就是该元素在原数组中的位置(从1开始计数),正好匹配你需要的「元素顺序」。
  • 隐式交叉连接:SQL里的逗号在这里等价于CROSS JOIN,会把原表base_table的每一行和拆分后的元素行关联起来,最终得到每个id对应的所有数组元素及它们的顺序。

效果验证

运行这个查询后,会完全符合你的期望输出:

  • id=1的行生成两行,order分别为1和2,对应原数组里的{..a..}和{..b..}
  • id=2、3的行各生成一行,order为1,对应它们的单个JSON元素
  • id=4的行生成两行,order为1和2,对应{..e..}和{..f..}

如果你的json_array列是jsonb类型(而非json),只需要把json_array_elements换成jsonb_array_elements即可,用法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:06:07