java - Mule ESB 两个 JSON 数组,使用 Dataweave 将一个数组合并到另一个数组中

标签 java mule esb dataweave

我正在使用 Mule ESB,我需要使用 JSON1 中的 ItemID 和 JSON2 中的 qty,然后创建一个新的 JSON 负载。

这是 JSON 1:

[{
  "itemid": "160544",
  "sku": "L45-075-14",
  "qty": "1.0000"
  }, { 
  "itemid": "160545",
  "sku": "063-0159-881",
  "qty": "1.0000"
}]

这是 JSON 2:

[{
  "sku": "603-0159-881",
  "qty": "4.0000"
  }, {
  "sku": "L45-075-14",
  "qty": "5.0000"
}]

这是我的数据编织代码:

 %dw 1.0
 %output application/java
 ---
 flowVars.SSRGetOrderItems map (action, index) -> {
                                    (action.itemid) : action.qty,
                                    (flowVars.SSRCreateStarshipItems filter $.sku == action.sku)
                                }

我的最终 Java 列表中不需要 SKU,我只需要在 sku 键上加入的 itemid 和 qty。 (请参阅下面所需的输出)

期望的输出:

 [{"160544"-"5.0000"}, {"160545"-"4.0000"}]

最佳答案

您应该使用 Hashmap 查找而不是过滤以获得更好的性能。可以通过两种方式完成,假设输出 [{"160544":"5.0000"}, {"160545":"4.0000"}]

%dw 1.0
%output application/java
%var skuLookup =  flowVars.SSRCreateStarshipItems groupBy $.sku
---
flowVars.SSRGetOrderItems map {
    ($.itemid) : skuLookup[$.sku][0].qty
}

%dw 1.0
%output application/java
%var skuLookup = {(flowVars.SSRCreateStarshipItems map {
    ($.sku) : $.qty
})}
---
flowVars.SSRGetOrderItems map {
    ($.itemid) : skuLookup[$.sku]
}

希望这有帮助。

关于java - Mule ESB 两个 JSON 数组,使用 Dataweave 将一个数组合并到另一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46796414/

相关文章:

esb - 推荐哪种基于 .NET 的 BPM(业务流程管理)软件?

java - WSO2 ESB 如何对 Custom Mediator 的消息进行签名

esb - WS02 : error No artifacts found to be deployed in this server. 忽略碳应用

java - 尽管使用 indexInBounds 仍获取 ArrayIndexOutOfBounds

Java - 反射 - 转换为 JSON 数组

Java 字符串包含无关数据

java - 在 Mule 流中使用安全的 SOAP Web 服务

java - Mule 是否为 Camel 路线提供热部署能力?

Java线程: Running a simple java thread program output confusion

java - 骡子3 : How to get the HTTP headers from a MuleMessage