Home > OS >  JOLT concatenate two strings
JOLT concatenate two strings

Time:12-29

I have this collection of driver details and i want to use jolt copy the properties concatenate first name and last name within a single property called name

{
  "drivers_details": [
    {
      "first_name": "Doru",
      "last_name": "Petre",
      "cnp": "1641201390687",
      "id_series": "RK",
      "id_number": "123456"
    },
    {
      "first_name": "GIGI",
      "last_name": "FANE",
      "cnp": "16412013906871",
      "id_series": "RK",
      "id_number": "1234567"
    }
  ]
}

i am using this spec for shift transformation spec

[
  {
    "operation": "shift"
,
    "spec": {
      "drivers_details": {
        "*": {
          "cnp": "body.drivers[&1].tin",
          "id_series": "body.drivers[&1].id_series",
          "id_number": "body.drivers[&1].id_number"
        }
      }
    }
  }
]

and this one for modify-overwrite, but it doesn't work how i was expecting

 {
    "operation": "modify-overwrite-beta",
    "spec": {
      "drivers_details": {
        "*": {
           "name": "=concat(@(2,first_name),' ',@(2,last_name))"
        }
      }
    }
  }


what is the correct way of doing this?

CodePudding user response:

You can use modify transformation as in the following case, and get rid of names other than newly formed attribute name such as

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "drivers_details": {
        "*": {
          "name": "=concat(@(1,first_name),' ',@(1,last_name))"
        }
      }
    }
  },
  {
    "operation": "remove",
    "spec": {
      "drivers_details": {
        "*": {
          "*name": ""
        }
      }
    }
  }, 
  { // this last spec stands only for ordering of the attributes
    "operation": "shift",
    "spec": {
      "drivers_details": {
        "*": {
          "name": "&2[&1].&",
          "cnp": "&2[&1].&",
          "id*": "&2[&1].&"
        }
      }
    }
  }
]

where those attributes(first/last_name) stays right-hand-side at the current level, so just only need to traverse 1 colon(:) which appears as @(1,..)

  • Related