2017-10-17 6 views
0

J'utilise Mule ESB et j'ai besoin d'utiliser l'ItemID de JSON1 et qty de JSON2 qui créent ensuite une nouvelle charge JSON.Mule ESB Deux tableaux JSON, fusionner un tableau dans un autre avec Dataweave

Voici JSON 1:

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

Voici JSON 2:

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

Voici mon code dataweave:

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

Je ne ai pas besoin du SKU dans ma dernière Liste Java, j'ai juste besoin de l'itemid et de la qté, joints sur la clé sku. (Voir ci-dessous la sortie désirée)

souhaité Sortie:

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

Répondre

2

Vous devez utiliser hashmap recherche filtre plutôt pour une meilleure performance. Il peut se faire de deux façons supposant que la production [{"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 
} 

ou

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

Hope this helps.