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

使用Jolt Transformation扁平化嵌套数组JSON的配置问题

Jolt实现嵌套数组字段扁平化方案

需求说明

输入是对象数组结构,每个对象包含固定长度为1的lang数组,数组内存放编程语言能力对象,需要将数组内的primary、secondary字段提取到外层对象同级,完成结构扁平化。

输入示例

[
  {
    "name": "James",
    "id": 1,
    "lang": [
      {
        "primary": "python",
        "secondary": "c++"
      }
    ]
  },
  {
    "name": "Kevin",
    "id": 2,
    "lang": [
      {
        "primary": "scala",
        "secondary": "java"
      }
    ]
  }
]

期望输出

[
  {
    "name": "James",
    "id": 1,
    "primary": "python",
    "secondary": "c++"
  },
  {
    "name": "Kevin",
    "id": 2,
    "primary": "scala",
    "secondary": "java"
  }
]

错误原因

之前编写的转换规范存在两个问题:

  • 输出路径里加了多余的转义符\,Jolt会把转义后的[、.、]当成字段名的普通字符,最终生成的key会是lang[0].primary这种错误格式,无法和外层的name、id字段合并到同一个对象
  • 路径层级匹配错误,没有正确对齐外层数组的索引位置

正确转换规范

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "name": "[&1].name",
        "id": "[&1].id",
        "lang": {
          "*": {
            "primary": "[&3].primary",
            "secondary": "[&3].secondary"
          }
        }
      }
    }
  }
]

通配符层级说明

处理lang数组内字段时,&3代表向上回溯3层的索引值:

  • 第0层(当前层):primary/secondary字段
  • 向上1层:lang数组内的元素索引(固定为0,因为数组长度恒为1)
  • 向上2层:lang字段本身
  • 向上3层:最外层数组的对象索引,和name、id映射的[&1]指向同一个目标对象,直接把字段写入该对象根节点即可完成扁平化

运行效果参考:
转换运行效果截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:01:11