尝试从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引用数组中的第一个元素作为目标名称