我遇到了一个问题,使用jolt转换转换一个非常复杂的嵌套JSON。输入和输出细节如下所示。
输入
{
"metadata": {
"timestamp": "2023-04-19T19:22:11+0000",
"dataProvider": "P44_Ocean"
},
"data": {
"stops": [
{
"stopNumber": "1"
},
{
"stopNumber": "2"
}
],
"latestEvents": [
{
"stopNumber": null,
"stopId": "XXXXXX-XXX-31a4-XXXX-389659XXXX",
"routeSegment": null,
"statusCode": "XXXX_OUT_FULL",
"eventDateTime": null,
"arrivalCode": null,
"arrivalDateTime": null,
"departureDateTime": null,
"groupStatus": null,
"arrivalEstimate": {
"plannedDateTime": "2023-04-18T04:30:00+0000",
"lastCalculatedDateTime": null,
"estimatedArrivalWindow": {
"startDateTime": null,
"endDateTime": null
}
},
"additionalAppointmentWindowStatuses": null
},
{
"stopNumber": null,
"stopId": "XXXXXX-XXX-31a4-XXXX-389659XXXX",
"routeSegment": "XXXXb4-5d1a-3e3a-ac08-ea5ZZZZZ",
"statusCode": "YYYYY_FROM_STOP",
"eventDateTime": "2023-04-19T14:05:00+0000",
"arrivalCode": null,
"arrivalDateTime": null,
"departureDateTime": null,
"groupStatus": null,
"arrivalEstimate": {
"plannedDateTime": null,
"lastCalculatedDateTime": null,
"estimatedArrivalWindow": {
"startDateTime": null,
"endDateTime": null
}
},
"additionalAppointmentWindowStatuses": null
},
{
"stopNumber": null,
"stopId": "ZZZZZZ1-391d-3c67-9c18-3e04YYYYYY",
"routeSegment": "XXXXb4-5d1a-3e3a-ac08-ea5ZZZZZ",
"statusCode": "UUUUU_AT_STOP",
"eventDateTime": null,
"arrivalCode": null,
"arrivalDateTime": null,
"departureDateTime": null,
"groupStatus": null,
"arrivalEstimate": {
"plannedDateTime": "2023-05-01T07:00:00+0000",
"lastCalculatedDateTime": "2023-04-19T19:22:11+0000",
"estimatedArrivalWindow": {
"startDateTime": "2023-05-01T07:00:00+0000",
"endDateTime": null
}
},
"additionalAppointmentWindowStatuses": null
},
{
"stopNumber": null,
"stopId": "ZZZZZZ1-391d-3c67-9c18-3e04YYYYYY",
"routeSegment": null,
"statusCode": "XXXXXXVERY",
"eventDateTime": null,
"arrivalCode": null,
"arrivalDateTime": null,
"departureDateTime": null,
"groupStatus": null,
"arrivalEstimate": {
"plannedDateTime": "2023-05-02T06:00:00+0000",
"lastCalculatedDateTime": null,
"estimatedArrivalWindow": {
"startDateTime": null,
"endDateTime": null
}
},
"additionalAppointmentWindowStatuses": null
}
]
}
}
预期输出
[ {
"StopNumber" : "1",
"LatestEventStopNumber" : null,
"LatestEventStopId" : [ "XXXXXX-XXX-31a4-XXXX-389659XXXX", "XXXXXX-XXX-31a4-XXXX-389659XXXX", "ZZZZZZ1-391d-3c67-9c18-3e04YYYYYY", "ZZZZZZ1-391d-3c67-9c18-3e04YYYYYY" ],
"LatestEventRouteSegment" : [ "XXXXb4-5d1a-3e3a-ac08-ea5ZZZZZ", "XXXXb4-5d1a-3e3a-ac08-ea5ZZZZZ", null ],
"LatestEventStatusCode" : [ "XXXX_OUT_FULL", "YYYYY_FROM_STOP", "UUUUU_AT_STOP", "XXXXXXVERY" ],
"LatestEventDateTime" : [ null,"2023-04-19T14:05:00+0000", null, null ],
"LatestEventArrivalCode" : null,
"LatestEventArrivalDateTime" : null,
"LatestEventDepartureDateTime" : null,
"LatestEventEstimatedArrivalPlannedDateTime" : [ "2023-04-18T04:30:00+0000", null, "2023-05-01T07:00:00+0000", "2023-05-02T06:00:00+0000" ],
"LatestEventEstimatedArrivalLastCalculatedDateTime" : [ null,null,"2023-04-19T19:22:11+0000", null ],
"LatestEventEstimatedArrivalWindowStartDateTime" : [ null,null,"2023-05-01T07:00:00+0000", null ],
"LatestEventEstimatedArrivalWindowEndDateTime" : null,
"LatestEventAdditionalAppointmentWindowStatuses" : null
}, {
"StopNumber" : "2",
"LatestEventStopNumber" : null,
"LatestEventStopId" : [ "XXXXXX-XXX-31a4-XXXX-389659XXXX", "XXXXXX-XXX-31a4-XXXX-389659XXXX", "ZZZZZZ1-391d-3c67-9c18-3e04YYYYYY", "ZZZZZZ1-391d-3c67-9c18-3e04YYYYYY" ],
"LatestEventRouteSegment" : [ "XXXXb4-5d1a-3e3a-ac08-ea5ZZZZZ", "XXXXb4-5d1a-3e3a-ac08-ea5ZZZZZ", null ],
"LatestEventStatusCode" : [ "XXXX_OUT_FULL", "YYYYY_FROM_STOP", "UUUUU_AT_STOP", "XXXXXXVERY" ],
"LatestEventDateTime" : [ null,"2023-04-19T14:05:00+0000", null, null ],
"LatestEventArrivalCode" : null,
"LatestEventArrivalDateTime" : null,
"LatestEventDepartureDateTime" : null,
"LatestEventEstimatedArrivalPlannedDateTime" : [ "2023-04-18T04:30:00+0000", null, "2023-05-01T07:00:00+0000", "2023-05-02T06:00:00+0000" ],
"LatestEventEstimatedArrivalLastCalculatedDateTime" : [ null,null,"2023-04-19T19:22:11+0000", null ],
"LatestEventEstimatedArrivalWindowStartDateTime" : [ null,null,"2023-05-01T07:00:00+0000", null ],
"LatestEventEstimatedArrivalWindowEndDateTime" : null,
"LatestEventAdditionalAppointmentWindowStatuses" : null
} ]
但是利用当前的jolt规范,我们没有得到适当的EventDateTime,我们只得到3个值,而我们应该得到包括第一个NUL1值的4个值。
[
{
"operation": "shift",
"spec": {
"data": {
"stops": {
"*": {
"@(stopNumber)": "[&1].StopNumber",
"@(2,latestEvents)": {
"*": {
"@(stopNumber)": "[&3].LatestEventStopNumber",
"@(stopId)": "[&3].LatestEventStopId",
"@(routeSegment)": "[&3].LatestEventRouteSegment",
"@(statusCode)": "[&3].LatestEventStatusCode",
"@(eventDateTime)": "[&2].LatestEventDateTime",
"@(arrivalCode)": "[&3].LatestEventArrivalCode",
"@(arrivalDateTime)": "[&3].LatestEventArrivalDateTime",
"@(departureDateTime)": "[&3].LatestEventDepartureDateTime",
"@(arrivalEstimate.plannedDateTime)": "[&3].LatestEventEstimatedArrivalPlannedDateTime",
"@(arrivalEstimate.lastCalculatedDateTime)": "[&3].LatestEventEstimatedArrivalLastCalculatedDateTime",
"@(arrivalEstimate.estimatedArrivalWindow.startDateTime)": "[&3].LatestEventEstimatedArrivalWindowStartDateTime",
"@(arrivalEstimate.estimatedArrivalWindow.endDateTime)": "[&3].LatestEventEstimatedArrivalWindowEndDateTime",
"@(additionalAppointmentWindowStatuses)": "[&3].LatestEventAdditionalAppointmentWindowStatuses"
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": ""
}
}
]
我们会得到这个的
[ {
"StopNumber" : "1",
"LatestEventStopNumber" : null,
"LatestEventStopId" : [ "XXXXXX-XXX-31a4-XXXX-389659XXXX", "XXXXXX-XXX-31a4-XXXX-389659XXXX", "ZZZZZZ1-391d-3c67-9c18-3e04YYYYYY", "ZZZZZZ1-391d-3c67-9c18-3e04YYYYYY" ],
"LatestEventRouteSegment" : [ "XXXXb4-5d1a-3e3a-ac08-ea5ZZZZZ", "XXXXb4-5d1a-3e3a-ac08-ea5ZZZZZ", null ],
"LatestEventStatusCode" : [ "XXXX_OUT_FULL", "YYYYY_FROM_STOP", "UUUUU_AT_STOP", "XXXXXXVERY" ],
"LatestEventDateTime" : [ "2023-04-19T14:05:00+0000", null, null ],
"LatestEventArrivalCode" : null,
"LatestEventArrivalDateTime" : null,
"LatestEventDepartureDateTime" : null,
"LatestEventEstimatedArrivalPlannedDateTime" : [ "2023-04-18T04:30:00+0000", null, "2023-05-01T07:00:00+0000", "2023-05-02T06:00:00+0000" ],
"LatestEventEstimatedArrivalLastCalculatedDateTime" : [ "2023-04-19T19:22:11+0000", null ],
"LatestEventEstimatedArrivalWindowStartDateTime" : [ "2023-05-01T07:00:00+0000", null ],
"LatestEventEstimatedArrivalWindowEndDateTime" : null,
"LatestEventAdditionalAppointmentWindowStatuses" : null
}, {
"StopNumber" : "2",
"LatestEventStopNumber" : null,
"LatestEventStopId" : [ "XXXXXX-XXX-31a4-XXXX-389659XXXX", "XXXXXX-XXX-31a4-XXXX-389659XXXX", "ZZZZZZ1-391d-3c67-9c18-3e04YYYYYY", "ZZZZZZ1-391d-3c67-9c18-3e04YYYYYY" ],
"LatestEventRouteSegment" : [ "XXXXb4-5d1a-3e3a-ac08-ea5ZZZZZ", "XXXXb4-5d1a-3e3a-ac08-ea5ZZZZZ", null ],
"LatestEventStatusCode" : [ "XXXX_OUT_FULL", "YYYYY_FROM_STOP", "UUUUU_AT_STOP", "XXXXXXVERY" ],
"LatestEventDateTime" : [ "2023-04-19T14:05:00+0000", null, null ],
"LatestEventArrivalCode" : null,
"LatestEventArrivalDateTime" : null,
"LatestEventDepartureDateTime" : null,
"LatestEventEstimatedArrivalPlannedDateTime" : [ "2023-04-18T04:30:00+0000", null, "2023-05-01T07:00:00+0000", "2023-05-02T06:00:00+0000" ],
"LatestEventEstimatedArrivalLastCalculatedDateTime" : [ "2023-04-19T19:22:11+0000", null ],
"LatestEventEstimatedArrivalWindowStartDateTime" : [ "2023-05-01T07:00:00+0000", null ],
"LatestEventEstimatedArrivalWindowEndDateTime" : null,
"LatestEventAdditionalAppointmentWindowStatuses" : null
} ]
请帮助谁是一个颠簸Maven,可以帮助我得到所需的输出。我想我是卡在最后一步
1条答案
按热度按时间2w2cym1i1#
似乎有一个bug。即使是
LatestEventRouteSegment
数组也有我观察到的同样的问题。您也可以使用
stops[].stopNumber
分区(使用@(5,&4[&3].stopNumber)
)来循环lastEvents
数组,如以下选项更短更清晰