I would like to sort the objects of an array depending on specific values of 2 keys. In particular I would like to sort by a specific kpiId value, and for the objects having that kpiId value, sort by the simulationId values. This iterates twice.
Input
{
"kpiResults": [
{
"simulationId": 3939,
"kpiId": 81,
"startTime": "2022-01-05T10:20:47",
"value": 2
},
{
"simulationId": 3936,
"kpiId": 80,
"startTime": "2022-01-05T10:20:47",
"value": 1
},
{
"simulationId": 3940,
"kpiId": 80,
"startTime": "2022-01-05T10:20:47",
"value": 12
},
{
"simulationId": 3940,
"kpiId": 81,
"startTime": "2022-01-05T10:20:47",
"value": 88
},
{
"simulationId": 3937,
"kpiId": 80,
"startTime": "2022-01-05T10:20:47",
"value": 32
},
{
"simulationId": 3939,
"kpiId": 80,
"startTime": "2022-01-05T10:20:47",
"value": 11
},
{
"simulationId": 3938,
"kpiId": 80,
"startTime": "2022-01-05T10:20:47",
"value": 12
},
{
"simulationId": 3938,
"kpiId": 81,
"startTime": "2022-01-05T10:20:47",
"value": 6
},
{
"simulationId": 3936,
"kpiId": 81,
"startTime": "2022-01-05T10:20:47",
"value": 4
},
{
"simulationId": 3937,
"kpiId": 81,
"startTime": "2022-01-05T10:20:47",
"value": 21
}
]
}
Desired Output (sort by kpiId=80,simulationId then sort by kpiId=81,simulationId)
{
"kpiResults": [
{
"simulationId": 3936,
"kpiId": 80,
"startTime": "2022-01-05T10:20:47",
"value": 1
},
{
"simulationId": 3937,
"kpiId": 80,
"startTime": "2022-01-05T10:20:47",
"value": 32
},
{
"simulationId": 3938,
"kpiId": 80,
"startTime": "2022-01-05T10:20:47",
"value": 12
},
{
"simulationId": 3939,
"kpiId": 80,
"startTime": "2022-01-05T10:20:47",
"value": 11
},
{
"simulationId": 3940,
"kpiId": 80,
"startTime": "2022-01-05T10:20:47",
"value": 12
},
{
"simulationId": 3936,
"kpiId": 81,
"startTime": "2022-01-05T10:20:47",
"value": 4
},
{
"simulationId": 3937,
"kpiId": 81,
"startTime": "2022-01-05T10:20:47",
"value": 21
},
{
"simulationId": 3938,
"kpiId": 81,
"startTime": "2022-01-05T10:20:47",
"value": 6
},
{
"simulationId": 3939,
"kpiId": 81,
"startTime": "2022-01-05T10:20:47",
"value": 2
},
{
"simulationId": 3940,
"kpiId": 81,
"startTime": "2022-01-05T10:20:47",
"value": 88
}
]
}
Any help with the required JOLT spec would be appreciated. Cheers M
You can apply sort transformation after making combination of kpiId
and simulationId
values object key names, and then remove them :
[
{
"operation": "shift",
"spec": {
"kpiResults": {
"*": "@(0,kpiId).@(0,simulationId)"
}
}
},
{
"operation": "sort"
},
{
"operation": "shift",
"spec": {
"*": {
"*": "kpiResults"
}
}
}
]