Yugi
Yugi

Reputation: 25

Compare and map values between two array of objects in JOLT

I need to map the headers and row values based on the dataKey value.

Input JSON

{
  "headers": [
    {
      "dataKey": "col-0",
      "displayName": "Product"
    },
    {
      "dataKey": "col-1",
      "displayName": "Dimension"
    },
    {
      "dataKey": "col-2",
      "displayName": "Output type "
    }
  ],
  "rows": [{
    "col-0": "Medium ",
    "col-1": "300x250",
    "col-2": "HTML [Animate]"
  }]
}

Expected Output

{
  "Data" : {
    "1" : {
      "Product":"Medium",
      "Dimension":"300x250",
      "Output type":"HTML [Animate]"
    }
  }
}

Spec:

This is the JOLT Spec i am using currently it is not producing the expected ouptut

[
  {
    "operation": "shift",
    "spec": {
      "headers": {
        "*": {
          "displayName": {
            "*": {
              "@(2,dataKey)": {
                "$": "Data.1.&",
                "*": {
                  "@(6,rows.&)": "Data.1.&"
                }
              }
            }
          }
        }
      }
    }
  }
]

Please provide the jolt spec for above scanario. i tried but not able to get the expected result.

Upvotes: 1

Views: 628

Answers (1)

Arun Sai
Arun Sai

Reputation: 1972

[
  {
    // segregate values of the same key and form respective arrays.
    "operation": "shift",
    "spec": {
      "headers": {
        "*": {
          "displayName": "@(1,dataKey)"
        }
      },
      "rows": {
        "*": {
          "*": "&"
        }
      }
    }
  },
  {
    // put every value array into temp array
    "operation": "shift",
    "spec": {
      "*": "temp[]"
    }
  },
  {
    // map first index element as key and second index element as a value into the output
    "operation": "shift",
    "spec": {
      "temp": {
        "*": {
          "1": "Data.1.@(1,[0])"
        }
      }
    }
  }

]

Upvotes: 1

Related Questions