Feb 4, 2021

Jolt transform both fields required

Jolt is a JSON to JSON transformation library where the transform is defined in JSON. As an example you may want to transform the latitude and longitude fields into a location object containing those fields.

Transform
[
  {
    "operation": "shift",
    "spec": {
      "latitude":"location.latitude",
      "longitude": "location.longitude"              
    }
  }
]
Input
{
  "latitude": "41.2565",
  "longitude": "-95.9345"
}
Output
{
  "location": {
    "latitude": "41.2565",
    "longitude": "-95.9345"
  }
}

Sometimes you only want to transform two fields if both values are present. A location isn’t really a location if it only has a latitude or a longitude. In that case you can nest the transform like this.

Both Required Transform
[
  {
    "operation": "shift",
    "spec": {
      "latitude": {
        "@(1,longitude)": {
          "@(2,latitude)": "location.latitude",
          "@(2,longitude)": "location.longitude"
        }
      }
    }
  }
]

What’s going on here? Well we are mapping the latitude to a block of transform. That transform maps “@(1, longitude)” –go up a level and get the longitude field– to another block that maps up two levels to latitude and up two levels to longitude to the “location.latitude” and “location.longitude” respectively. Now we are only mapping the data if both latitude and longitude exist!

About the Author

Scott Bock profile.

Scott Bock

Principal Technologist

Scott is a Senior Software Engineer with over 12 years of experience using Java, and 5 years experience in technical leadership positions. His strengths include troubleshooting and problem solving abilities, excellent repertoire with customers and management, and verbal and written communication. He develops code across the entire technology stack including database, application, and user interface.

One thought on “Jolt transform both fields required

  1. Scott Bock says:

    See full code example with test at https://github.com/scottbock/Jolt

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Blog Posts
An Exploration in Rust: Musings From a Java/C++ Developer
Why Rust? It’s fast (runtime performance) It’s small (binary size) It’s safe (no memory leaks) It’s modern (build system, language features, etc) When Is It Worth It? Embedded systems (where it is implied that interpreted […]
Getting Started with CSS Container Queries
For as long as I’ve been working full-time on the front-end, I’ve heard about the promise of container queries and their potential to solve the majority of our responsive web design needs. And, for as […]
Simple improvements to making decisions in teams
Software development teams need to make a lot of decisions. Functional requirements, non-functional requirements, user experience, API contracts, tech stack, architecture, database schemas, cloud providers, deployment strategy, test strategy, security, and the list goes on. […]
JavaScript Bundle Optimization – Polyfills
If you are lucky enough to only support a small subset of browsers (for example, you are targeting a controlled set of users), feel free to move along. However, if your website is open to […]