如何使用Apache NiFi的Jolt Transform将数组值转为单个JSON对象
使用Apache NiFi的Jolt Transform把数组值拆成独立JSON对象
输入数据
{ "headers": { "query": "NA", "param": "false" }, "data": [ { "SEQ_NUM": [ 162, 162, 162, 162, 162, 162, 162, 162 ] }, { "SEQ_NUM": [ 162, 162, 162, 162, 162, 162, 162, 162 ] } ] }
原Jolt规格的问题
你提供的Jolt配置无法正确将每个SEQ_NUM数组元素拆分为独立对象,还会丢失headers信息,也没法对应原data数组的层级逻辑。
可行的Jolt解决方案
如果要把所有SEQ_NUM数组元素转成独立JSON对象,同时可选保留headers,可以用以下配置:
[ // 第一步:拆分SEQ_NUM数组并暂存数据 { "operation": "shift", "spec": { "headers": "headers", "data": { "*": { "SEQ_NUM": { "*": { "@": "temp[#].SEQ_NUM" } } } } } }, // 第二步:将暂存的数组转为最终的data数组(不需要headers可跳过此步) { "operation": "shift", "spec": { "headers": "headers", "temp": "data" } } ]
转换后输出示例
执行上述配置后,输出结果如下:
{ "headers": { "query": "NA", "param": "false" }, "data": [ {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162}, {"SEQ_NUM": 162} ] }
如果不需要保留headers,可简化配置为:
[ { "operation": "shift", "spec": { "data": { "*": { "SEQ_NUM": { "*": { "@": "data[#].SEQ_NUM" } } } } } } ]
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

