I need to unwrap JSON objects in order to reduce the nesting of input like
[
{
"key1": {
"value": "abc"
},
"key2": {
"value": "xyz"
}
},
{
"key1": {
"value": "123"
},
"key2": {
"value": "456"
}
}
]
Instead it can just map straight to the value without the unnecessary object nesting.
Input JSON
[
{
"typedValues": {
"key1": {
"value": "abc"
},
"key2": {
"value": "xyz"
}
}
},
{
"typedValues": {
"key1": {
"value": "123"
},
"key2": {
"value": "456"
}
}
}
]
My spec attempt
I was able to remove the "typedValues" wrapping but unable to achieve the key:value reduction.
[
{
"operation": "shift",
"spec": {
"*": {
"typedValues": {
"@": ""
}
}
}
}
]
Output from attempt
[
{
"key1": {
"value": "abc"
},
"key2": {
"value": "xyz"
}
},
{
"key1": {
"value": "123"
},
"key2": {
"value": "456"
}
}
]
Desired output
[
{
"key1": "abc",
"key2": "xyz"
},
{
"key1": "123",
"key2": "456"
}
]
You can use a shift transformaion such as
[
{
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"value": "&3.&1" // &3 : going 3 levels up the tree to grab the outermost indexes of the wrapper objects
} // &1 : replicating key 1/2 after going 1 level up
}
}
}
},
{ // to get rid of the object keys
"operation": "shift",
"spec": {
"*": ""
}
}
]
or shorly match @value
with &
wildcard which represents the current level replication of the key values
[
{
"operation": "shift",
"spec": {
"*": {
"*": { //typedValues
"*": {
"@value": "[&3].&"
}
}
}
}
}
]