11-16-2022 08:13 AM
Hi all,
I’m having an issue while designing the mapping property with null value for my JSON object. For example I have a Mapper to map $input to $body with the expression like follow:
{“my_id”: $input.Id,
“my_name”: $input.Name,
“my_address”: $input.Address
}.
When the $input is {“Id”: 123,“Name”: null, “Address”: “A Street, B District, C City”}, the $body should be: {“my_id”: 123,
“my_name”: null,
“my_address”: “A Street, B District, C City”
}. But when the $input is {“Id”: 123, “Address”: “A Street, B District, C City”}, the $body should be:
{“my_id”: $input.Id,
“my_address”: $input.Address
}. I tried with hasOwnProperty() and hasPath(), but they all treats the null value as not existing property, so it will not work.
Does anyone know how can I keep the null value for mapping, but eliminate property that does not exist in the $input. Thank you in advanced.
best regards.
11-16-2022 09:43 AM
Hi @nluu,
You can try the following expression:
$input.mapKeys((v,k)=> "my_"+k.toLowerCase())
I believe it should do the work.
Regards,
Bojan
11-16-2022 11:41 PM
Hi @bojanvelevski,
thank you for your response. It actually a very good solution. But in my case, the name is not always in the format of “my_” + key. The name will depends on the naming I agreed with the Database team and the CRM team, so sometime it will be like “close_date”: $input.ProductEffectiveDate_c etc. But I’ll try to base on your suggestion to find out the solution. Thank you so much
Regards
12-12-2022 07:34 PM
Hope this helps 😀
{“my_id”: “Id”, “my_name”: “Name”, “my_address”: “Address” }.mapValues((val,key)=> $input.get(val,{})).filter((val,key)=> (!(val instanceof Object)||!(val.isEmpty())))