skip to Main Content

I am new to JOLT. I am creating a JOLT specification to parse a JSON from one format to another. However when i use the RHS as "&1.name" it doesn’t work as expected and creates a different format. But when i use "[&1].name", it works.

I cannot share the data due to policy constraints. Giving an example

eg.
Input JSON:

[
  {
    "name": "my name1"
  },
  {
    "name": "my name2"
  }
]

JOLT spec (Not working) :

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "name": "&1.name"
      }
    }
  }
]

JOLT spec (working) :

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "name": "[&1].name"
      }
    }
  }
]

Please help me understand the purpose of [] on RHS.

2

Answers


  1. You can even rephrase by replacing the name on the right hand side by an ampersand & as

    [
      {
        "operation": "shift",
        "spec": {
          "*": {
            "name": "[&1].&"
          }
        }
      }
    ]
    

    in order to replicate it

    Prepending both [&1] and &1 targets the same level which’s going up the tree 1 level in order to reach the level of the indexes of the outermost array by traversing opening curly brace(s) ({) once. But the first one yields arraywise result instead of index numbers 0,1,2 … those are generated by the second one.

    Login or Signup to reply.
  2. Both two spec is valid.

    &1: get 1 level up key.

    [&1]: get 1 level up index.

    For example in your spec, &1 means 0 and 1 as key and your output can be like this:

    {
      "0": {
        "name": "my name1"
      },
      "1": {
        "name": "my name2"
      }
    }
    

    And when you using the [&1] means 0 and 1 as index of array and your output can be like this:

    [
      {
        "name": "my name1"
      },
      {
        "name": "my name2"
      }
    ]
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search