求Apache NiFi JOLT处理器的数组展开转换Spec(重复非数组值)
Apache NiFi JOLT 处理器转换规则实现
转换需求
编写JOLT转换规则,实现以下JSON转换逻辑:
- 输入为包含若干子数组的JSON数组,其中部分子数组长度相同(本例为3)
- 将输入展开为与该相同长度一致的多条记录(本例为3条)
- 长度为1的子数组,其值在每条记录中重复保留
- 所有数据的
text标签格式在转换后保持与输入一致
输入JSON
[ [ { "text": "AAA" } ], [ { "text": "BBB" } ], [ { "text": "11" }, { "text": "12" }, { "text": "13" } ], [ { "text": "A1" }, { "text": "B2" }, { "text": "C3" } ], [ { "text": "Z" } ] ]
预期输出JSON
[ [ [ { "text": "AAA" } ], [ { "text": "BBB" } ], [ { "text": "11" } ], [ { "text": "A1" } ], [ { "text": "Z" } ] ], [ [ { "text": "AAA" } ], [ { "text": "BBB" } ], [ { "text": "12" } ], [ { "text": "B2" } ], [ { "text": "Z" } ] ], [ [ { "text": "AAA" } ], [ { "text": "BBB" } ], [ { "text": "13" } ], [ { "text": "C3" } ], [ { "text": "Z" } ] ] ]
JOLT 转换规则
[ { "operation": "shift", "spec": { "*": { "*": { "@": "[&1].[]" } } } }, { "operation": "shift", "spec": { "*": { "*": { "@": "[#2].[]" } } } } ]
规则说明
- 第一个Shift操作:按子数组元素的索引进行映射,长度为3的子数组会将第0、1、2位元素分别分配到结果的第0、1、2个数组中;长度为1的子数组仅有的元素会被自动填充到所有目标数组,实现重复保留的效果。
- 第二个Shift操作:将每个目标数组中的元素重新包装为嵌套数组结构,确保输出中每个
text对象都被包裹在单独的数组里,与预期格式完全匹配。
内容的提问来源于stack exchange,提问作者VinceL
相关产品推荐
相关产品推荐

