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

使用Jolt Transform扁平化复杂嵌套JSON遇问题求助

Jolt Transform嵌套JSON扁平化解决方案

输入JSON

{"OutboundSchedulingLT": {"DepertureSite": "0DE1","ShippingPoint": "010D","LeadTimes": {"TransportationLT": [{"DestinationSite": "0DEA","DestinationLT": [{"ShippingCondition": "01","DestinationSiteLT": "3"},{"ShippingCondition": "02","DestinationSiteLT": "4"},{"ShippingCondition": "OA","DestinationSiteLT": "2"}]},{"DestinationSite": "0DEB","DestinationLT": [{"ShippingCondition": "01","DestinationSiteLT": "1"},{"ShippingCondition": "02","DestinationSiteLT": "2"},{"ShippingCondition": "OA","DestinationSiteLT": "3"}]}],"DNCreationLeadTimes": {"DNCreationLeadTime": [{"DistributionChannel": "40","OrderType": "ZFUT","OrderReason": "","DNCreationLT": "3"},{"DistributionChannel": "40","OrderType": "ZOR","OrderReason": "","DNCreationLT": "3"},{"DistributionChannel": "70","OrderType": "ZU20","OrderReason": "RDC","DNCreationLT": "1"}]},"DNProcessingLeadTimes": {"DNProcessingLeadTime": [{"DistributionChannel": "40","OrderType": "ZFUT","OrderReason": "","DNprocessingLT": "2"},{"DistributionChannel": "40","OrderType": "ZOR","OrderReason": "","DNprocessingLT": "4"},{"DistributionChannel": "70","OrderType": "ZU20","OrderReason": "RDC","DNprocessingLT": "3"}]},"DNLoadingLeadTimes": {"DNLoadingLeadTime": [{"DistributionChannel": "40","ShippingCondition": "O1","OrderType": "ZFUT","OrderReason": "","DNLoadingLT": "3"},{"DistributionChannel": "40","ShippingCondition": "O1","OrderType": "ZOR","OrderReason": "","DNLoadingLT": "3"},{"DistributionChannel": "70","ShippingCondition": "O1","OrderType": "ZU20","OrderReason": "RDC","DNLoadingLT": "1"}]},"VASLeadTimes": {"VASLeadTime": [{"VASCode": "L01","VASLT": "2"},{"VASCode": "P02","VASLT": "3"}]}}}}

期望扁平化字段

  • DepertureSite
  • DestinationSite
  • DestinationSiteLT
  • DistributionChannel
  • OrderType
  • OrderReason
  • DNCreationLT
  • DNprocessingLT
  • DNLoadingLT
  • VASCode
  • VASLT

尝试的Jolt转换规格

[{"operation": "shift","spec": {"OutboundSchedulingLT": {"DepertureSite": "DepertureSite","LeadTimes": {"TransportationLT": {"*": {"DestinationSite": "DestinationSite","DestinationLT": {"*": {"DestinationSiteLT": "DestinationSiteLT"}}}},"DNCreationLeadTimes": {"DNCreationLeadTime": {"*": {"DistributionChannel": "DistributionChannel","OrderType": "OrderType","OrderReason": "OrderReason","DNCreationLT": "DNCreationLT"}}},"DNProcessingLeadTimes": {"DNProcessingLeadTime": {"*": {"DNprocessingLT": "DNprocessingLT"}}},"DNLoadingLeadTimes": {"DNLoadingLeadTime": {"*": {"DNLoadingLT": "DNLoadingLT"}}},"VASLeadTimes": {"VASLeadTime": {"*": {"VASCode": "VASCode","VASLT": "VASLT"}}}}}}]

期望输出

[{"DepertureSite": "0DE1","DestinationSite": "0DEA","DestinationSiteLT": "3","DistributionChannel": "40","OrderType": "ZOR","OrderReason": "","DNCreationLT": "3","DNprocessingLT": "2","DNLoadingLT": "3","VASCode": "L01","VASLT": "2"},{"DepertureSite": "0DE1","DestinationSite": "0DEA","DestinationSiteLT": "4","DistributionChannel": "70","OrderType": "ZU20","OrderReason": "RDC","DNprocessingLT": "4","DNLoadingLT": "3","VASCode": "L01","VASLT": "2"},{"DepertureSite": "0DE1","DestinationSite": "0DEA","DestinationSiteLT": "2","DistributionChannel": "70","OrderType": "ZU20","OrderReason": "RDC","DNCreationLT": "1","DNprocessingLT": "3","DNLoadingLT": "1","VASCode": "L01","VASLT": "2"},{"DepertureSite": "0DE1","DestinationSite": "0DEB","DestinationSiteLT": "1","DistributionChannel": "40","OrderType": "ZOR","OrderReason": "","DNCreationLT": "3","DNprocessingLT": "2","DNLoadingLT": "3","VASCode": "P02","VASLT": "3"},{"DepertureSite": "0DE1","DestinationSite": "0DEB","DestinationSiteLT": "2","DistributionChannel": "70","OrderType": "ZU20","OrderReason": "RDC","DNprocessingLT": "4","DNLoadingLT": "3","VASCode": "P02","VASLT": "3"},{"DepertureSite": "0DE1","DestinationSite": "0DEB","DestinationSiteLT": "3","DistributionChannel": "70","OrderType": "ZU20","OrderReason": "RDC","DNCreationLT": "1","DNprocessingLT": "3","DNLoadingLT": "1","VASCode": "P02","VASLT": "3"}]

问题分析与解决方案

问题根源

原转换规格仅简单平铺所有字段,未处理多数组间的关联逻辑:

  1. 不同层级数组的条目未按预期组合,导致字段值互相覆盖
  2. 未生成DestinationSite+DestinationSiteLT+VASCode的指定组合
  3. DN相关字段未与对应索引的DestinationSiteLT条目绑定

正确转换规格

通过多步Jolt操作实现指定组合逻辑:

[
  // 第一步:拆分并暂存各模块数据
  {
    "operation": "shift",
    "spec": {
      "OutboundSchedulingLT": {
        "DepertureSite": "common.DepertureSite",
        "LeadTimes": {
          "TransportationLT": {
            "0": { "DestinationSite": "site1.id", "DestinationLT": "site1.lts" },
            "1": { "DestinationSite": "site2.id", "DestinationLT": "site2.lts" }
          },
          "DNCreationLeadTimes": { "DNCreationLeadTime": "dn.*" },
          "DNProcessingLeadTimes": { "DNProcessingLeadTime": "dn.*" },
          "DNLoadingLeadTimes": { "DNLoadingLeadTime": "dn.*" },
          "VASLeadTimes": { "VASLeadTime": { "0": "vas1", "1": "vas2" } }
        }
      }
    }
  },
  // 第二步:组合site1与vas1,生成前3条结果
  {
    "operation": "shift",
    "spec": {
      "common": { "DepertureSite": "output[0].&", "DepertureSite": "output[1].&", "DepertureSite": "output[2].&" },
      "site1": {
        "id": "output[0].DestinationSite", "id": "output[1].DestinationSite", "id": "output[2].DestinationSite",
        "lts": {
          "*": {
            "DestinationSiteLT": "output[#1].&"
          }
        }
      },
      "dn": {
        "*": {
          "DistributionChannel": "output[#1].&",
          "OrderType": "output[#1].&",
          "OrderReason": "output[#1].&",
          "DNCreationLT": "output[#1].&",
          "DNprocessingLT": "output[#1].&",
          "DNLoadingLT": "output[#1].&"
        }
      },
      "vas1": {
        "VASCode": "output[0].&", "VASCode": "output[1].&", "VASCode": "output[2].&",
        "VASLT": "output[0].&", "VASLT": "output[1].&", "VASLT": "output[2].&"
      },
      // 组合site2与vas2,生成后3条结果
      "site2": {
        "id": "output[3].DestinationSite", "id": "output[4].DestinationSite", "id": "output[5].DestinationSite",
        "lts": {
          "*": {
            "DestinationSiteLT": "output[3+#1].&"
          }
        }
      },
      "vas2": {
        "VASCode": "output[3].&", "VASCode": "output[4].&", "VASCode": "output[5].&",
        "VASLT": "output[3].&", "VASLT": "output[4].&", "VASLT": "output[5].&"
      }
    }
  },
  // 第三步:提取结果数组并清理空字段
  {
    "operation": "shift",
    "spec": {
      "output": {
        "*": {
          "*": "&1.&"
        }
      }
    }
  },
  {
    "operation": "remove",
    "spec": {
      "*": {
        "": ""
      }
    }
  }
]

逻辑说明

  1. 暂存模块数据:将TransportationLT、DN相关数组、VAS数组拆分暂存,方便后续组合
  2. 指定组合生成:按期望输出规则,将0DEA与L01绑定、0DEB与P02绑定,同时关联对应索引的DN字段
  3. 清理结构:提取最终结果数组,移除冗余空字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:45:45