I need to transform below Input JSON where the ID has multiple ORG_LVL_2 codes and it should fall under the same OrgUnits array, whereas in my spec a separate object is getting created.
Previous Input:
[
{
"id": "0000606800",
"ORG_LVL_2": "Co0053"
},
{
"id": "0000606800",
"ORG_LVL_2": "Co0054"
},
{
"id": "0000609480",
"ORG_LVL_2": "Co0055"
}
]
Below Spec:
[
{ // partition by "id" values while hardcoding for the attributes "ORG_LVL_1" and "C01"
"operation": "shift",
"spec": {
"*": {
"id": "@1,id.&",
"O*": {
"#ORG_LVL_1|$": "@2,id.&2.orgUnitLevel",
"#C01|@": "@2,id.&2.orgUnitCode"
}
}
}
},
{ // dissipate each component of the independent arrays to their respective indexes
// in order to generate the desired objects
"operation": "shift",
"spec": {
"*": {
"#test": "IntegrationEntities.integrationEntity[#2].integrationEntityHeader.referenceCodeForEntity",
"$": ["IntegrationEntities.integrationEntity[#2].integrationEntityDetails.glAccount.id",
"IntegrationEntities.integrationEntity[#2].integrationEntityDetails.glAccount.glAccountCode"],
"*": {
"*": {
"*": "IntegrationEntities.integrationEntity[#4].integrationEntityDetails.glAccount.orgUnits.orgUnitAssignment[&2].orgUnitDetails[&].&1"
}
}
}
}
},
{ // get rid of redundantly generated null values
"operation": "modify-overwrite-beta",
"spec": {
"*": "=recursivelySquashNulls"
}
}
]
There's minor modification in the input instead of ORG_LVL_2 its "LVL2" but we need the same output in orgUnits:
Input:
[
{
"id": "0000606800",
"status": "Active",
"name": "Office Supplies",
"LVL2": "Co0053"
},
{
"id": "0000606800",
"status": "Active",
"name": "Office Supplies",
"LVL2": "Co0054"
},
{
"id": "0000609480",
"status": "Active",
"name": "Office Supplies",
"LVL2": "Co0055"
}
]
Additionally, in the output along with the id, I want to display "name" as "glAccountDescription" and same as "glAccountName", and "id" value in "referenceCodeForEntity" and "integrationTrackingNumber" required output as below:
{
"IntegrationEntities": {
"integrationEntity": [
{
"integrationEntityHeader": {
"referenceCodeForEntity": "0000606800",
"integrationTrackingNumber" : "0000606800"
},
"integrationEntityDetails": {
"glAccount": {
"id": "0000606800",
"status": "ACTIVE",
"glAccountName": "Office Supplies",
"glAccountDescription": "Office Supplies",
"glAccountCode": "0000606800",
"glAccountTypeId": "GLTYPE001",
"orgUnits": {
"orgUnitAssignment": [
{
"orgUnitDetails": [
{
"orgUnitLevel": "ORG_LVL_1",
"orgUnitCode": "C01"
},
{
"orgUnitLevel": "ORG_LVL_2",
"orgUnitCode": "Co0053"
}
]
},
{
"orgUnitDetails": [
{
"orgUnitLevel": "ORG_LVL_1",
"orgUnitCode": "C01"
},
{
"orgUnitLevel": "ORG_LVL_2",
"orgUnitCode": "Co0054"
}
]
}
]
}
}
}
}
]
}
}
I've developed this spec with the help of Barbaros Ozhan, which is currently meeting the expected outcome, if there's way to minimize code, please feel free to suggest. Thank you
[
{ // generate new attribute, namely "ORG_LVL_2"
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"ORG_LVL_2": "@(1,LVL2)"
}
}
},
{ // delete the original attribute
"operation": "remove",
"spec": {
"*": {
"LVL2": ""
}
}
},
{ // partition by "id" values while hardcoding for the attributes "ORG_LVL_1" and "C01"
"operation": "shift",
"spec": {
"*": {
"id": "@1,id.&",
"name": "@1,id.&",
"O*": {
"#ORG_LVL_1|$": "@2,id.&2.orgUnitLevel",
"#C01|@": "@2,id.&2.orgUnitCode"
}
}
}
},
{ // dissipate each component of the independent arrays to their respective indexes
// in order to generate the desired objects
"operation": "shift",
"spec": {
"*": {
"$": [
"IntegrationEntities.integrationEntity[#2].integrationEntityDetails.glAccount.id",
"IntegrationEntities.integrationEntity[#2].integrationEntityDetails.glAccount.glAccountCode",
"IntegrationEntities.integrationEntity[#2].integrationEntityHeader.referenceCodeForEntity",
"IntegrationEntities.integrationEntity[#2].integrationEntityHeader.integrationTrackingNumber"
],
"#0010": "IntegrationEntities.integrationEntity[#2].integrationEntityDetails.glAccount.glAccountTypeId",
"name": [
"IntegrationEntities.integrationEntity[#2].integrationEntityDetails.glAccount.glAccountName",
"IntegrationEntities.integrationEntity[#2].integrationEntityDetails.glAccount.glAccountDescription"
],
"#ACTIVE": "IntegrationEntities.integrationEntity[#2].integrationEntityDetails.glAccount.status",
"*": {
"*": {
"*": "IntegrationEntities.integrationEntity[#4].integrationEntityDetails.glAccount.orgUnits.orgUnitAssignment[&2].orgUnitDetails[&].&1"
}
}
}
}
},
{ // get rid of redundantly generated null values
"operation": "modify-overwrite-beta",
"spec": {
"*": "=recursivelySquashNulls"
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"IntegrationEntities": {
"integrationEntity": {
"*": {
"integrationEntityDetails": {
"glAccount": {
"glAccountName": "=firstElement(@(1,&))",
"glAccountDescription": "=firstElement(@(1,&))"
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"IntegrationEntities": {
"integrationEntity": {
"*": {
"integrationEntityHeader": {
"integrationTrackingNumber": "IntegrationEntities.integrationEntity.[&2].integrationEntityHeader.integrationTrackingNumber",
"referenceCodeForEntity": "IntegrationEntities.integrationEntity.[&2].integrationEntityHeader.referenceCodeForEntity",
"additionalInfo": "IntegrationEntities.integrationEntity.[&2].integrationEntityHeader.additionalInfo"
},
"integrationEntityDetails": {
"glAccount": {
"id": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.id",
"status": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.status",
"glAccountName": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.glAccountName",
"glAccountDescription": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.glAccountDescription",
"glAccountCode": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.glAccountCode",
"glAccountTypeId": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.glAccountTypeId",
"parentGlAccountId": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.parentGlAccountId",
"orgUnits": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.orgUnits",
"glAccountErpId": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.glAccountErpId"
}
}
}
}
}
}
}
]