使用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"}]
问题分析与解决方案
问题根源
原转换规格仅简单平铺所有字段,未处理多数组间的关联逻辑:
- 不同层级数组的条目未按预期组合,导致字段值互相覆盖
- 未生成
DestinationSite+DestinationSiteLT+VASCode的指定组合 - 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": { "*": { "": "" } } } ]
逻辑说明
- 暂存模块数据:将
TransportationLT、DN相关数组、VAS数组拆分暂存,方便后续组合 - 指定组合生成:按期望输出规则,将
0DEA与L01绑定、0DEB与P02绑定,同时关联对应索引的DN字段 - 清理结构:提取最终结果数组,移除冗余空字段
内容的提问来源于stack exchange,提问作者Thiyagaraj Narayanan
相关产品推荐
相关产品推荐

