如何在mule dataweave中删除json中更改键名的先前映射字段

如何在mule dataweave中删除json中更改键名的先前映射字段,mule,transform,message,dataweave,Mule,Transform,Message,Dataweave,这是我的意见 `[{“eventType”:“订单已发货”,“entityId”: “d0594c02-fb0e-47e1-a61e-1139dc185657”,“用户名”: "educator@school.edu,“日期时间”:“2010-11-11T07:00:00Z”,“状态”: “已装运”、“附加数据”:{“quoteId”: “d0594c02-fb0e-47e1-a61e-1139dc185657”,“clientReferenceId”: “Srites004”、“修改后的DDT

这是我的意见

`[{“eventType”:“订单已发货”,“entityId”: “d0594c02-fb0e-47e1-a61e-1139dc185657”,“用户名”: "educator@school.edu,“日期时间”:“2010-11-11T07:00:00Z”,“状态”: “已装运”、“附加数据”:{“quoteId”: “d0594c02-fb0e-47e1-a61e-1139dc185657”,“clientReferenceId”: “Srites004”、“修改后的DDT”:“2010-11-11T07:00:00Z”、“包装ID”: “AIM_包”、“sbsOrderId”:“TEST-TS-201809-79486”, “订单参考ID”:“b0123c02-fb0e-47e1-a61e-1139dc185987”, “发货日期”1:“2010-11-11T07:00:00Z”,“发货日期”2:“ “2010-11-12T07:00:00Z”,“发货日期”第3页:“2010-11-13T07:00:00Z”, “运送方法1”:“UPS地面”,“运送方法3”:“UPS地面3”, “装运方法2”:“UPS接地2”,“跟踪编号3”:“333”,“跟踪编号1”:“2222”,“跟踪编号2”:“221”}

}]`

预期的输出是删除与shipdate、tracking number、shipmethod类似的关键字名称。它的范围从shipdate_1到n

{ “属性名称”:{ “quoteId”:“d0594c02-fb0e-47e1-a61e-1139dc185657”, “clientReferenceId”:“Srites004”, “修改后的DDT”:“2010-11-11T07:00:00Z”, “包ID”:“AIM_包”, “sbsOrderId”:“TEST-TS-201809-79486”, “订单参考ID”:“b0123c02-fb0e-47e1-a61e-1139dc185987”, “发货日期”1:“2010-11-11T07:00:00Z”,待删除 “发货日期2”:“2010-11-12T07:00:00Z”,待删除 “发货日期3”:“2010-11-13T07:00:00Z”,待删除 “装运方法_1”:“UPS接地”,待移除 “装运方法3”:“UPS接地3”-待移除 “装运方法2”:“UPS接地2”,待移除 “trackingNumber_3”:“333”,待删除 “trackingNumber_1”:“2222”,待删除 “trackingNumber_2”:“221”-待删除
}

您可以使用
mapObject
操作符对键进行迭代,并筛选出要排除的键

%dw 1.0
%output application/json skipNullOn="everywhere"
---
attribute_name : payload.additionalData[0] mapObject {
    (($$) : $) when  not ( ($$ contains "shipDate") or ($$ contains "shipMethod") or ($$ contains "trackingNumber") )
 } 
更新:用于动态字段名称 定义属性,如

property.field.name=shipDate,shipMethod,trackingNumber
更新代码:-

%dw 1.0
%output application/json skipNullOn="everywhere"
%var fields = p("property.field.name") splitBy ","
%function checkField(key)  (sizeOf (fields filter (key contains $))) == 0
---
attribute_name : payload.additionalData[0] mapObject {
    (($$) : $) when checkField($$) 
 }

希望这有帮助。

这很好,但是我们可以从属性文件调用这些字段吗是的。您可以从属性文件调用这些字段,如
p(“property.field.name”)
从属性文件调用时,我遇到一些错误。您能给我一些更有用的示例代码吗?如果您将尝试过的代码与错误一起发布,而不是提及一些错误,那么会更容易提供帮助。使用逗号分隔的字段定义属性,然后在映射时获取它。使用相同的代码进行筛选。我已更新了answe但是我得到了更新代码中的所有字段,谢谢你的回复