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
You can even rephrase by replacing the
name
on the right hand side by an ampersand&
asin 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.Both two spec is valid.
&1
: get 1 level up key.[&1]
: get 1 level up index.For example in your spec,
&1
means0
and1
as key and your output can be like this:And when you using the
[&1]
means0
and1
as index of array and your output can be like this: