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

EDI解析JSON数据的Jolt数组转数组转换问题求助

EDI JSON数据Jolt转换修正方案

源EDI JSON数据

{
  "INS-2000_loop": [
    {
      "HD-2300_loop": [
        {
          "COB-2320_loop": [
            {
              "COB_01": "P",
              "COB_02": "ABC10XX0092001",
              "COB_03": "1"
            },
            {
              "DTP_01": "344",
              "DTP_02": "D8",
              "DTP_03": "20240101"
            },
            {
              "DTP_01": "345",
              "DTP_02": "D8",
              "DTP_03": "20240101"
            }
          ]
        },
        {
          "COB-2320_loop": [
            {
              "COB_01": "P",
              "COB_02": "ABC10XX0092000",
              "COB_03": "1"
            },
            {
              "DTP_01": "344",
              "DTP_02": "D8",
              "DTP_03": "20230101"
            },
            {
              "DTP_01": "345",
              "DTP_02": "D8",
              "DTP_03": "20230101"
            }
          ]
        },
        {
          "COB-2320_loop": [
            {
              "COB_01": "P",
              "COB_02": "ABC10XX00920",
              "COB_03": "1"
            },
            {
              "DTP_01": "344",
              "DTP_02": "D8",
              "DTP_03": "20220101"
            },
            {
              "DTP_01": "345",
              "DTP_02": "D8",
              "DTP_03": "20220101"
            }
          ]
        }
      ]
    }
  ]
}

当前使用的Jolt转换规范

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "HD-2300_loop": {
            "*": {
              "COB-2320_loop": {
                "*": {
                  "COB_01": "&6[&5].coverages.cobs.[#].responsibility",
                  "COB_02": "&6[&5].coverages.cobs.[#].id",
                  "COB_03": "&6[&5].coverages.cobs.[#].code",
                  "DTP_01": {
                    "344": {
                      "@(2,DTP_03)": "&8[&7].coverages.cobs.[#].start"
                    },
                    "345": {
                      "@(2,DTP_03)": "&8[&7].coverages.cobs.[#].end"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

错误输出结果

{
  "INS-2000_loop" : [ {
    "coverages" : {
      "cobs" : [ {
        "responsibility" : [ "P", "P", "P" ],
        "id" : [ "ABC10XX0092001", "ABC10XX0092000", "ABC10XX00920" ],
        "code" : [ "1", "1", "1" ],
        "start" : [ "20240101", "20230101", "20220101" ],
        "end" : [ "20240101", "20230101", "20220101" ]
      } ]
    }
  } ]
}

期望输出结果

{
  "coverages": {
    "cobs": [
      {
        "responsibility": "P",
        "id": "ABC10XX0092001",
        "code": "1",
        "start": "20240101",
        "end": "20240101"
      },
      {
        "responsibility": "P",
        "id": "ABC10XX0092000",
        "code": "1",
        "start": "20230101",
        "end": "20230101"
      },
      {
        "responsibility": "P",
        "id": "ABC10XX00920",
        "code": "1",
        "start": "20220101",
        "end": "20220101"
      }
    ]
  }
}

注:原期望输出中日期存在笔误,已根据源数据修正为对应年份的日期

修正后的Jolt转换规范

[
  {
    "operation": "shift",
    "spec": {
      "INS-2000_loop": {
        "*": {
          "HD-2300_loop": {
            "*": {
              "COB-2320_loop": {
                "[0]": {
                  "COB_01": "coverages.cobs.[&3].responsibility",
                  "COB_02": "coverages.cobs.[&3].id",
                  "COB_03": "coverages.cobs.[&3].code"
                },
                "*": {
                  "DTP_01": {
                    "344": {
                      "@(2,DTP_03)": "coverages.cobs.[&5].start"
                    },
                    "345": {
                      "@(2,DTP_03)": "coverages.cobs.[&5].end"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

方案说明

  1. 索引绑定修正:原规范中使用[#]会取当前层级的元素索引,导致所有COB/DTP字段被聚合到同一个cobs元素。修正后使用[&3](或[&5],根据层级计数)绑定到HD-2300_loop的元素索引,确保每个HD-2300_loop对应的COB数据生成独立的cobs数组元素。
  2. COB字段定位:明确指定COB-2320_loop的第一个元素([0])为COB字段所在对象,避免遍历所有子元素时重复处理。
  3. 兼容性处理:该规范支持源数据中0个或多个COB-2320_loop对象的场景,当数量为0时,cobs数组会为空。

内容的提问来源于stack exchange,提问作者Abhai Raj Llewellyn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:35:07