05-07-2022 02:22 AM
Hello SnapLogic Experts,
I require your help in mapping expression to map the keys(columns).
I need to change the column names in the incoming data according to the mapping list that I have and load it into the database.
I’m trying to achieve it using mapKeys() but missing something. I really need someone’s advice to make it. I would be grateful if anyone can solve it. 🙂
Input data:
[
{
“ID”:1,
“NAME”:“testuser”
}
]
Column mapping data from parameter:
[
{
“src_col_name”: “ID”,
“tgt_col_name”: “sys_id”
},
{
“src_col_name”: “NAME”,
“tgt_col_name”: “user_name”
}
]
Expected output:
{
“sys_id”:1,
“user_name”:“testuser”
}
Thank you.
05-07-2022 04:57 AM
Hi @spinaka,
I do not understand the “Column mapping data from parameter”. You are sending this array as parameter in the pipeline or something ?
Here is a solution that might help you, if it’s not correct just answer me question above.
My sample data for the expression:
[
{
"ID":1,
"NAME":"testuser",
"Mapping": [
{
"src_col_name": "ID",
"tgt_col_name": "sys_id"
},
{
"src_col_name": "NAME",
"tgt_col_name": "user_name"
}
]
}
]
Expression:
$.mapKeys((value, key) => $Mapping.findIndex(el => el.src_col_name == key) >= 0 ? $Mapping.find(element => element.src_col_name == key).tgt_col_name : key)
Output:
[
{
"sys_id": 1,
"user_name": "testuser"
}
]
Regards.
Viktor
05-07-2022 07:36 AM
Amazing @viktor_n. I made a little change and your trick worked perfectly. You deserve an award 🙂
I will be using it in my original pipeline to see the same result. Would mind clarifying the “findIndex()” used here?
I transformed the column mapping accordingly. Not an issue.
05-07-2022 09:38 AM
findIndex() function is used for searching the index of a particular element in Array. If match is not found, -1 is returned.
Syntax: { Array }.findIndex(((element, index, array) => { condition })
Accepts a callback function that returns 3 parameters.
The returned index is the index of the first element that returns true.
$Mapping.findIndex(el => el.src_col_name == key)
Here inside the expression I check if the ‘Mapping’ array has ‘src_col_name’ with a value same as the field from the root($), and if it finds a match it will return the index of that particular element, otherwise it will be -1.
Hope this will help you