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

时间:2017-10-17 18:02:58

标签: 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,我只需要itemid和qty,加入sku键。 (见下面所需的输出)

期望的输出:

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

1 个答案:

答案 0 :(得分:2)

您应该使用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]
}

希望这有帮助。