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

如何编写通用Jolt转换规则实现嵌套数据转线性数据

Jolt转换规则:嵌套JSON转线性格式

先明确要覆盖的4种输入场景及对应输出效果:

场景1:subList元素包含S1、S2字段

输入:

{
  "practice_loc": "NY",
  "prac_num": "PN001",
  "topId": "T100",
  "subList": [
    {"S1": "s1_val1", "S2": "s2_val1"},
    {"S1": "s1_val2", "S2": "s2_val2"}
  ]
}

输出:

[
  {
    "practice_loc": "NY",
    "prac_num": "PN001",
    "topId": "T100",
    "S1": "s1_val1",
    "S2": "s2_val1"
  },
  {
    "practice_loc": "NY",
    "prac_num": "PN001",
    "topId": "T100",
    "S1": "s1_val2",
    "S2": "s2_val2"
  }
]

场景2:subList元素仅含S1字段

输入:

{
  "practice_loc": "CA",
  "prac_num": "PN002",
  "topId": "T200",
  "subList": [
    {"S1": "s1_val3"},
    {"S1": "s1_val4"}
  ]
}

输出:

[
  {
    "practice_loc": "CA",
    "prac_num": "PN002",
    "topId": "T200",
    "S1": "s1_val3"
  },
  {
    "practice_loc": "CA",
    "prac_num": "PN002",
    "topId": "T200",
    "S1": "s1_val4"
  }
]

场景3:subList元素仅含S2字段

输入:

{
  "practice_loc": "TX",
  "prac_num": "PN003",
  "topId": "T300",
  "subList": [
    {"S2": "s2_val5"},
    {"S2": "s2_val6"}
  ]
}

输出:

[
  {
    "practice_loc": "TX",
    "prac_num": "PN003",
    "topId": "T300",
    "S2": "s2_val5"
  },
  {
    "practice_loc": "TX",
    "prac_num": "PN003",
    "topId": "T300",
    "S2": "s2_val6"
  }
]

场景4:subList元素无S1、S2字段

输入:

{
  "practice_loc": "FL",
  "prac_num": "PN004",
  "topId": "T400",
  "subList": [
    {},
    {}
  ]
}

输出:

[
  {
    "practice_loc": "FL",
    "prac_num": "PN004",
    "topId": "T400"
  },
  {
    "practice_loc": "FL",
    "prac_num": "PN004",
    "topId": "T400"
  }
]

通用Jolt转换规则

[
  {
    "operation": "shift",
    "spec": {
      "subList": {
        "*": {
          "@(2,practice_loc)": "[&1].practice_loc",
          "@(2,prac_num)": "[&1].prac_num",
          "@(2,topId)": "[&1].topId",
          "S1": "[&1].S1",
          "S2": "[&1].S2"
        }
      }
    }
  }
]

规则说明

  • shift是Jolt重组JSON结构的核心操作,负责字段映射与结构展平
  • subList.*遍历数组内每个元素,&1代表当前元素的索引,用来定位输出数组的对应位置
  • @(2,practice_loc)表示向上回溯2层(从subList元素层到根节点)提取字段值,复制到当前输出记录中
  • S1、S2字段直接映射到输出位置,原元素无对应字段时,输出自动忽略,适配所有场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:20:07