Home > OS >  JOLT get arrays with dynamic keys
JOLT get arrays with dynamic keys

Time:12-29

I'm trying to get some messages from a webservice. Inside data the keys are dynamic and i'm trying to get all the messages from the arrays and concatenate them in error message.

{
  "success": false,
  "message": "Eroare validare date",
  "data": {
    "driver.0.name": [
      "Trebuie să menționați nume/denumire pentru șofer"
    ],
    "driver.1.name": [
      "Trebuie să menționați nume/denumire pentru șofer"
    ],
    "driver.1tin": [
      "CNP/CUI invalid pentru șofer"
    ],
    "vehicle.card": [
      "Serie CIV invalidă pentru vehiculul asigurat"
    ]
  }
}

I wrote this spec :

[
  {
    "operation": "shift",
    "spec": {
      "message": "body.info_message",
      "data": {
        "*": {
          "*": {
            "#1": "body.error_message"
          }
        }
      }
    }
  }

but i don't know how to target the messages

CodePudding user response:

You can consecutively use shift and then modify transformation along with a join function such as

[
  {
    "operation": "shift",
    "spec": {
      "message": "body.info_message", // changed the key name
      "data": {
        "*": {
          "*": "body.error_message" // combine whole content nested within a single array
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "error_message": "=join(' | ',@(1,&))"
      }
    }
  }
]

in order to generate the pipe separated content for the error messages such like

{
  "body" : {
    "info_message" : "Eroare validare date",
    "error_message" : "Trebuie s? men?iona?i nume/denumire pentru ?ofer | Trebuie s? men?iona?i nume/denumire pentru ?ofer | CNP/CUI invalid pentru ?ofer | Serie CIV invalid? pentru vehiculul asigurat"
  }
}
  • Related