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

问题描述:

我正在使用Mule ESB,我需要使用JSON1中的ItemID和来自JSON2的qty,然后创建一个新的JSON负载。Mule ESB两个JSON数组,使用Dataweave将一个数组合并到另一个数组

这里是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" 
}] 

这里是我的dataweave代码:

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

我不需要SKU在我的最后Java列表,我只需要itemid和qty,加入sku关键字。 (见下期望输出)

所需的输出:

[{"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] 
} 

希望这有助于。