Replacing Fields which are in List of Objects

Hi Team,

I have a requirement to replace the fields which are in list of objects. Please find the details below:

Please find the input JSON below:
listValueCommunityedited

I need to replace the CurrencyCode value from 2nd highlighted to 1st highlighted (i.e. INR to IndianRupee and AUD to AustralianDollar). Remaining fields in 1st highlighter should remain as is.

Thanks in Advance! Quick help is highly appreciated.
Gopi.

Are you expecting to process $shoppingHistoryList.shoppingHistory on its own or are you merging it with $input1_shoppingHistoryList.shoppingHistory where each element in $shoppingHistoryList corresponds to an element in $input1_shoppingHistoryList?

You can use replace expression to perform your conversion logic at ease but what is not clear is if you like to have this done dynamically, what exact mechanism would you like it to do? Based on the position of the array? or there are some other logic or fuzzy logic (less ideal)?

Thank you @tstack for the reply, I need to merge with $input1_shoppingHistoryList.shoppingHistory where each element in $shoppingHistoryList corresponds to an element in $input1_shoppingHistoryList but, the remaining fields in ‘$shoppingHistoryList.shoppingHistory’ should not be changed.

Thanks @aleung for your reply… It should be done dynamically based on the position of the array. The $input1_shoppingHistoryList.shoppingHistory is nothing but the transformed values of the $shoppingHistoryList.shoppingHistory based on the sql mapping table.

You can do this with the expression language inside of a Mapper. For merging the arrays, you can use the sl.zip() function, like so:

sl.zip($shoppingHistoryList.shoppingHistory, $input1_shoppingHistoryList.shoppingHistory)

The result of that expression will be an array of pairs containing the element from the first array and the corresponding element from the second array. Once they are grouped together, you can use a map() method on the array to iterate over the pairs and then use extend() method to update the properties in the element from the first array with properties from the element in the second:

sl.zip($shoppingHistoryList.shoppingHistory, $input1_shoppingHistoryList.shoppingHistory).map(x => x[0].extend(x[1]))

Here’s an example pipeline that does this mapping:

ReplaceFields_2018_12_16.slp (5.7 KB)

2 Likes

A Very Big Thanks @tstack