Kishore Chilakala
Kishore Chilakala

Reputation: 316

Prepare List from Different input Arrays and Objects in Jolt

Hi I am new to JOLT transformation and I am trying to transform some thing like below.

Main goal here is to have a list of objects without making the constant indexing in jolt.

Transformation of different objects to a common list .

Any Help is appreciate .

Data provides here is an example of what I expected.

Input :

{
  "CIT": [
    {
      "name": "name_CIT_1",
      "desc": "desc_CIT_1"
    },
    {
      "name": "name_CIT_2",
      "desc": "desc_CIT_2"
    },
    {
      "name": "name_CIT_3",
      "desc": "desc_CIT_3"
    }
  ],
  "BIT": {
    "name": "name_BIT",
    "desc": "desc_BIT"
  },
  "NIT": {
    "name": "name_NIT",
    "desc": "desc_NIT"
  },
  "KIT": {
    "name": "name_KIT",
    "desc": "desc_KIT"
  }
}

Jolt:

[
  {
    "operation": "modify-default-beta",
    "spec": {
      "*": {}
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {}
  },
  {
    "operation": "shift",
    "spec": {
      "CIT": {
        "*": {
          "name": "CollegeList[0].name",
          "desc": "CollegeList[0].desc"
        }
      },
      "BIT": {
        "name": "CollegeList[1].name",
        "desc": "CollegeList[1].desc"
      },
      "NIT": {
        "name": "CollegeList[2].name",
        "desc": "CollegeList[2].desc"
      },
      "KIT": {
        "name": "CollegeList[3].name",
        "desc": "CollegeList[3].desc"
      }
    }
  }
]

Output:

{
  "CollegeList" : [ {
    "name" : [ "name_CIT_1", "name_CIT_2", "name_CIT_3" ],
    "desc" : [ "desc_CIT_1", "desc_CIT_2", "desc_CIT_3" ]
  }, {
    "name" : "name_BIT",
    "desc" : "desc_BIT"
  }, {
    "name" : "name_NIT",
    "desc" : "desc_NIT"
  }, {
    "name" : "name_KIT",
    "desc" : "desc_KIT"
  } ]
}

Expected Output:

{
  "CollegeList": [
    {
      "name": "name_CIT_1",
      "desc": "desc_CIT_1"
    },
    {
      "name": "name_CIT_2",
      "desc": "desc_CIT_2"
    },
    {
      "name": "name_CIT_3",
      "desc": "desc_CIT_3"
    },
    {
      "name": "name_BIT",
      "desc": "desc_BIT"
    },
    {
      "name": "name_NIT",
      "desc": "desc_NIT"
    },
    {
      "name": "name_KIT",
      "desc": "desc_KIT"
    }
  ]
}

Upvotes: 0

Views: 234

Answers (2)

Arun Sai
Arun Sai

Reputation: 1982

Another approach for the same :

[
  {
    "operation": "shift",
    "spec": {
      "CIT": {
        "*": "CollegeList[]"
      },
      "*": "CollegeList[]"
    }
  }
]

Upvotes: 1

Barbaros Özhan
Barbaros Özhan

Reputation: 65393

You can use two levels of shift transformations. Indeed, the desired array is obtained within the first level except for the key of the array which is root as default. Then only renaming of the array's key occurs within the second level such as

[
  {
    "operation": "shift",
    "spec": {
      "*": "&1"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "@(0,&)": "CollegeList"
    }
  }
]

Upvotes: 1

Related Questions