Quantcast
Channel: Blog | Object Partners
Viewing all articles
Browse latest Browse all 93

Jolt transform a default value dependent on another field

$
0
0

Jolt is a JSON to JSON transformation library where the transform is defined in JSON

Sometimes you need to add a default value along with a data transformation. The straight forward way to do this is to define a “shift” operation to handle the data movement and a “default” operation to handle the default value. For example if I want to copy the “state” field into the “value” field of a “region” object with a “type” of “STATE” the Jolt transform would look like this

Transform
[
  {
    "operation": "shift",
    "spec": {
      "state": "region.value"
    }
  },
  {
    "operation": "default",
    "spec": {
      "region": {
        "type": "STATE"
      }
    }
  }
]
Input
{
  "state": "Nebraska"
}
Output
{
  "region": {
    "value": "Nebraska",
    "type": "STATE"
  }
}

This works, however there is an issue if we don’t send a state value the default still gets applied. So our output looks like this.

Blank State Output
{
  "region": {
    "type": "STATE"
  }
}

Fortunately we can solve this issue by defining a block of transform for the “state” field instead of just a just mapping to “region.value”. First we use “@(1, state)” –go up a level and get the state field– to map to the “region.value” and then we use “#STATE” –literal string STATE– to map to “region.type”

Fixed Transform
[
  {
    "operation": "shift",
    "spec": {
      "state": {
        "@(1,state)": "region.value",
        "#STATE": "region.type"
      }
    }
  }
]

This will solve our problem and only apply a type if there is a state field. In fact we could take this a step further and handle a province field as well.

State/Providence Transform
[
  {
    "operation": "shift",
    "spec": {
      "state": {
        "@(1,state)": "region.value",
        "#STATE": "region.type"
      },
      "province": {
        "@(1,province)": "region.value",
        "#PROVINCE": "region.type"
      }
    }
  }
]

Viewing all articles
Browse latest Browse all 93

Latest Images

Trending Articles



Latest Images