Mule 4:如何编写DataWeave表达式实现指定输出格式转换
DataWeave 转换实现方案
输入示例
[ { "payload": "[{\"qty\": 6.00, \"itemKey\": \"55555\"}]", "deliveryNote": "", "deliveryDate": "2022-10-22T00:00:00.000Z", "shoppingCartId": "2", "poNumber": "iisdown", "customerKey": "44444", "id": "9018A0000007OGrQAM" } ]
目标输出
{ "id": "9018A0000007OGrQAM", "customerKey": "44444", "deliveryDate": "2022-10-22T00:00:00.000Z", "poNumber": "testingpo", "shoppingCartId": "2", "deliveryNote": "testing", "lines": [ { "itemKey": "55555", "qty": 5 } ] }
DataWeave 表达式
%dw 2.0 output application/json --- payload[0] mapObject (value, key) -> { (key): value } - "payload" ++ { lines: read(payload[0].payload, "application/json") map (line) -> { itemKey: line.itemKey, qty: 5 as Number }, poNumber: "testingpo", deliveryNote: "testing" }
代码说明
- 提取目标对象:输入是包含单个对象的数组,用
payload[0]取出数组内的目标对象 - 保留原有字段:通过
mapObject遍历原对象的所有键值对,保留id、customerKey、deliveryDate、shoppingCartId这些不需要修改的字段 - 移除冗余字段:用
- "payload"删除原对象中的payload字段 - 解析并转换lines数组:使用
read()函数将原payload字段的JSON字符串解析为数组,再通过map遍历数组,修改qty为指定值5,保留itemKey - 替换指定字段值:直接给
poNumber和deliveryNote赋值为需求中的新值,通过++合并到结果对象中
内容的提问来源于stack exchange,提问作者ilya.fastiv
相关产品推荐
相关产品推荐

