Skip to main content
dg_01
Silver ⭐️
May 25, 2020
Solved

Jolt Specification to complex structure

Hi,

I've got an INPUT-json that looks like this:

{
"vendor" : "myINC",
"beginTime" : "2020-01-21T10:00:00+08:00",
"userLabel" : "DB",
"Types" : [ {
"Name" : "type001",
"subTypes" : [ {
"subtype003" : {
"counter1" : "0",
"counter5" : "0",
"counter54" : "0"
}
},{
"subtype001": {
"counter002": "0",
"counter5": "0",
"counter65": "0"
}
} ]
}, {
"Name" : "type002",
"subTypes" : [ {
"subtype006" : {
"counter1" : "0",
"counter5" : "0",
"counter54" : "0"
}},{
"subtype009" : {
"counter002": "0",
"counter5": "0",
"counter65": "0"
}
}]
} ]
}

 

and would need a OUTPUT-json like this:

 

{
"vendor" : "myINC",
"beginTime" : "2020-01-21T10:00:00+08:00",
"userLabel" : "DG",
"Types" : [ {
"Name" : "type001",
"subType" : [ {
"Name": "subtype003",
"Counters": [
{
"name": "counter1",
"value": "0"
},{
"name": "counter5",
"value": "0"
},{
"name": "counter54",
"value": "0"
} ]
},{
"Name": "subtype001",
"Counters": [
{
"name": "counter002",
"value": "0"
},{
"name": "counter5",
"value": "0"
},{
"name": "counter65",
"value": "0"
}]
} ]
}, {
"Name" : "type002",
"subType" : [ {
"Name": "subtype006",
"Counters": [
{
"name": "counter1",
"value": "0"
},{
"name": "counter5",
"value": "0"
},{
"name": "counter54",
"value": "0"
} ]
},{
"Name": "subtype009",
"Counters": [
{
"name": "counter002",
"value": "0"
},{
"name": "counter5",
"value": "0"
},{
"name": "counter65",
"value": "0"
}]
} ]
} ]
}

 

Couldn't make any real breakthrough if not getting till here, some help really appreciated.

Thanks 

PVVK
PVVKAnswer
Gold ⭐️
June 14, 2020

@dg_01 
Your desired output contains DG as value for userLabel. I am not sure if it is a typo, so, I tried converting it as well. If not needed, you can remove the modify-overwrite-beta part.

[
{
"operation": "modify-overwrite-beta",
"spec": {
"userLabel": "DG"
}
},
{
"operation": "shift",
"spec": {
"Types": {
"*": {
"subTypes": {
"*": {
"*": {
"$0": "Types[&4].subType[&2].Name",
"*": {
"$": "Types[&5].subType[&3].CounterNames[]",
"@": "Types[&5].subType[&3].CounterValues[]"
}
}
}
},
"*": "Types[&1].&"
}
},
"*": "&"
}
},
{
"operation": "shift",
"spec": {
"Types": {
"*": {
"subType": {
"*": {
"CounterNames": {
"*": "Types[&4].subType[&2].Counters[&].name"
},
"CounterValues": {
"*": "Types[&4].subType[&2].Counters[&].value"
},
"*": "Types[&3].subType[&1].&"
}
},
"*": "Types[&1].&"
}
},
"*": "&"
}
}
]

Here, the second spec(first shift) gives the following:

{
"vendor" : "myINC",
"beginTime" : "2020-01-21T10:00:00+08:00",
"userLabel" : "DG",
"Types" : [ {
"Name" : "type001",
"subType" : [ {
"Name" : "subtype003",
"CounterNames" : [ "counter1", "counter5", "counter54" ],
"CounterValues" : [ "0", "0", "0" ]
}, {
"Name" : "subtype001",
"CounterNames" : [ "counter002", "counter5", "counter65" ],
"CounterValues" : [ "0", "0", "0" ]
} ]
}, {
"Name" : "type002",
"subType" : [ {
"Name" : "subtype006",
"CounterNames" : [ "counter1", "counter5", "counter54" ],
"CounterValues" : [ "0", "0", "0" ]
}, {
"Name" : "subtype009",
"CounterNames" : [ "counter002", "counter5", "counter65" ],
"CounterValues" : [ "0", "0", "0" ]
} ]
} ]
}

The last spec gives you the desired output

2 replies

PVVK
PVVKAnswer
Gold ⭐️
June 14, 2020

@dg_01 
Your desired output contains DG as value for userLabel. I am not sure if it is a typo, so, I tried converting it as well. If not needed, you can remove the modify-overwrite-beta part.

[
{
"operation": "modify-overwrite-beta",
"spec": {
"userLabel": "DG"
}
},
{
"operation": "shift",
"spec": {
"Types": {
"*": {
"subTypes": {
"*": {
"*": {
"$0": "Types[&4].subType[&2].Name",
"*": {
"$": "Types[&5].subType[&3].CounterNames[]",
"@": "Types[&5].subType[&3].CounterValues[]"
}
}
}
},
"*": "Types[&1].&"
}
},
"*": "&"
}
},
{
"operation": "shift",
"spec": {
"Types": {
"*": {
"subType": {
"*": {
"CounterNames": {
"*": "Types[&4].subType[&2].Counters[&].name"
},
"CounterValues": {
"*": "Types[&4].subType[&2].Counters[&].value"
},
"*": "Types[&3].subType[&1].&"
}
},
"*": "Types[&1].&"
}
},
"*": "&"
}
}
]

Here, the second spec(first shift) gives the following:

{
"vendor" : "myINC",
"beginTime" : "2020-01-21T10:00:00+08:00",
"userLabel" : "DG",
"Types" : [ {
"Name" : "type001",
"subType" : [ {
"Name" : "subtype003",
"CounterNames" : [ "counter1", "counter5", "counter54" ],
"CounterValues" : [ "0", "0", "0" ]
}, {
"Name" : "subtype001",
"CounterNames" : [ "counter002", "counter5", "counter65" ],
"CounterValues" : [ "0", "0", "0" ]
} ]
}, {
"Name" : "type002",
"subType" : [ {
"Name" : "subtype006",
"CounterNames" : [ "counter1", "counter5", "counter54" ],
"CounterValues" : [ "0", "0", "0" ]
}, {
"Name" : "subtype009",
"CounterNames" : [ "counter002", "counter5", "counter65" ],
"CounterValues" : [ "0", "0", "0" ]
} ]
} ]
}

The last spec gives you the desired output

Translate
dg_01
dg_01Author
Silver ⭐️
June 15, 2020

Hi Pvvk,

I really want to thank You!

Your Jolt is great.

I really need to work on my jolt skills and this helps me, have to exercise my reading of specs.

 

Thanks

Davide

Translate