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

如何用Jolt Transform保留原数据并追加提取的EDI数据字段?

Jolt Transform 解决方案:保留原始数据并追加提取字段

以下是实现需求的Jolt规范,既能完整保留原始数据结构,又能新增ext对象并填充指定提取字段:

[
  // 第一步:原样保留所有原始数据
  {
    "operation": "shift",
    "spec": {
      "*": "&"
    }
  },
  // 第二步:提取subscriber字段到ext对象
  {
    "operation": "shift",
    "spec": {
      "@": "&", // 保留已有数据
      "segments": {
        "*": {
          "REF01": {
            "0F": {
              "@(2,REF02)": "ext.subscriber"
            }
          }
        }
      }
    }
  },
  // 第三步:提取start字段到ext对象
  {
    "operation": "shift",
    "spec": {
      "@": "&", // 保留已有数据(含原始数据和已添加的subscriber)
      "loops": {
        "*": {
          "loops": {
            "*": {
              "id": {
                "2300": {
                  "segments": {
                    "*": {
                      "DTP01": {
                        "348": {
                          "@(2,DTP03)": "ext.start"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

规则说明

  • 第一步:通过shift操作将根节点下所有字段原样保留,确保后续操作不会丢失原有数据。
  • 第二步:遍历根节点的segments数组,匹配REF01值为0F的元素,将其对应的REF02值赋值给ext.subscriber,同时保留所有已有数据。
  • 第三步:遍历根节点的loops数组,先找到id为2100的loop,再深入其子loops找到id为2300的loop,最后在其segments中匹配DTP01值为348的元素,将对应的DTP03值赋值给ext.start,全程保留已有数据。

输入示例

{
  "id": "2000",
  "segments": [
    {
      "REF02": "xxxxxxxxxxxx",
      "REF01": "0F",
      "id": "REF"
    },
    {
      "REF02": "yyyyyyyyyyyy",
      "REF01": "1L",
      "id": "REF"
    }
  ],
  "loops": [
    {
      "id": "2100",
      "segments": []
    },
    {
      "id": "2100",
      "segments": [],
      "loops": [
        {
          "id": "2300",
          "segments": [
            {
              "DTP01": "348",
              "DTP03": "20220101",
              "DTP02": "D8",
              "id": "DTP"
            },
            {
              "DTP01": "349",
              "DTP03": "20221231",
              "DTP02": "D8",
              "id": "DTP"
            }
          ]
        }
      ]
    }
  ]
}

输出示例

{
  "ext": {
    "subscriber": "xxxxxxxxxxxx",
    "start": "20220101"
  },
  "id": "2000",
  "segments": [
    {
      "REF02": "xxxxxxxxxxxx",
      "REF01": "0F",
      "id": "REF"
    },
    {
      "REF02": "yyyyyyyyyyyy",
      "REF01": "1L",
      "id": "REF"
    }
  ],
  "loops": [
    {
      "id": "2100",
      "segments": []
    },
    {
      "id": "2100",
      "segments": [],
      "loops": [
        {
          "id": "2300",
          "segments": [
            {
              "DTP01": "348",
              "DTP03": "20220101",
              "DTP02": "D8",
              "id": "DTP"
            },
            {
              "DTP01": "349",
              "DTP03": "20221231",
              "DTP02": "D8",
              "id": "DTP"
            }
          ]
        }
      ]
    }
  ]
}

内容的提问来源于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.08.01 14:35:39