Apache NiFi Jolt转换求助:将含数组的JSON拆分为单条记录
Apache NiFi Jolt转换:按索引拆分数组生成新对象
针对你需要将每个对象内的数值数组按索引拆分、保留其他字段的需求,可以使用以下Jolt转换规范:
[ { "operation": "shift", "spec": { "*": { "val1": { "*": { "@2,ABC": "[&3].ABC", "@2,DEF": "[&3].DEF", "@2,GHI": "[&3].GHI", "@2,JKL": "[&3].JKL", "@": "[&3].val1", "@2,val2[&1]": "[&3].val2" } } } } }, { "operation": "shift", "spec": { "*": "[]" } } ]
转换逻辑说明
第一步Shift操作
- 遍历根数组中的每个原对象(
*) - 针对每个对象的
val1数组,逐个处理其元素(内层*),&1代表当前元素的索引 - 通过
@2,字段名回溯到原对象层级,复制ABC/DEF/GHI/JKL这些固定字段到新结构中 @直接取当前val1元素的值,@2,val2[&1]取同索引的val2元素,确保两个数组的同位置元素配对- 这一步会生成中间结构:每个原对象对应一个子数组,子数组包含拆分后的多个对象
- 遍历根数组中的每个原对象(
第二步Shift操作
- 遍历中间结构的所有子数组,用
[]将子数组内的对象全部展开到根数组中,得到最终的扁平化输出
- 遍历中间结构的所有子数组,用
效果验证
将你提供的输入JSON代入转换后,会生成预期的输出:每个原对象根据数组长度拆分为多个对象,每个新对象保留原固定字段,并对应一组同索引的val1和val2值。
内容的提问来源于stack exchange,提问作者VKB
相关产品推荐
相关产品推荐

