尝试从JSON输入中获取嵌套数组,并使用Nifi Jolt Transform将其转换为具有适当键和值的对象数组,我感到非常困难。
我遇到的问题是我需要手动指定列名。它们在JSON响应中并不明显。
列名为
column_names = ['icao24','callsign','origin_country','time_position','last_contact','long','lat','baro_altitude','on_ground','velocity', 'true_track','vertical_rate','sensors','geo_altitude','squawk','spi','position_source']
输入数据示例:
{
"time": 1675791934,
"states": [
[
"a57b26",
"N452SM ",
"United States",
1675791621,
1675791621,
-105.1168,
39.9103,
null,
true,
0,
90,
null,
null,
null,
null,
false,
0
],
[
"aa56da",
"UAL1986 ",
"United States",
1675791933,
1675791933,
-122.1349,
41.1152,
10972.8,
false,
235.33,
2.51,
0,
null,
11049,
null,
false,
0
]
]
}
预期输出:
[
{
"icao24": "a57b26",
"callsign": "N452SM ",
"origin_country": "United States",
"time_position": 1675791621,
"last_contact": 1675791621,
"long": -105.1168,
"lat": 39.9103,
"baro_altitude": null,
"on_ground": true,
"velocity": 0,
"true_track": 90,
"vertical_rate": null,
"sensors": null,
"geo_altitude": null,
"squawk": null,
"spi": false,
"position_source": 0
},
{...}
]
我从轮班Jolt规范中得出的结果是。。。
[
{
"operation": "shift",
"spec": {
"states": {
"*": {
"*": "[&1]"
}
}
}
}
]
结果:
[
["a57b26", "N452SM ", "United States", 1675791621, 1675791621, -105.1168, 39.9103, null, true, 0, 90, null, null, null, null, false, 0],
["aa56da", "UAL1986 ", "United States", 1675791933, 1675791933, -122.1349, 41.1152, 10972.8, false, 235.33, 2.51, 0, null, 11049, null, false, 0]
]
如果在有效负载中发送了列名,我可能会弄清楚,但不幸的是,我需要在转换中手动设置它们。
我确实找到了一个类似情况的有用堆栈,但同样,解决方案看起来像重载正则表达式,我只是还不太熟悉Nifi Jolt。
Jolt引用数组中的第一个元素作为目标名称