cancel
Showing results for 
Search instead for 
Did you mean: 

Mapping the columns matching from the Array

spinaka
New Contributor III

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.

3 REPLIES 3

viktor_n
Contributor II

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

spinaka
New Contributor III

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.

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.

  • First parameter is the value of each element
  • Second is the index
  • Third is the original array.

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