如何在NiFi中拆分JSON数组为单独FlowFile并按属性路由?
NiFi拆分动态JSON数组并按键路由解决方案
1. 拆分JSON数组为单个FlowFile(解决拆分失败问题)
之前使用SplitJson未成功大概率是JsonPath表达式错误,正确配置如下:
- 选用SplitJson处理器
- 设置
JsonPath Expression为$[*]:该表达式会匹配顶级JSON数组的每一个元素,将每个独立对象拆分为单独的FlowFile - 确认
Split Into选项为Each element in the array,确保每个数组元素生成一个独立FlowFile
处理后每个FlowFile内容将是单个JSON对象,例如:
{ "A" : "10560, 543, 267, 384, 0"}
2. 提取每个FlowFile的键名(用于路由判断)
使用EvaluateJsonPath处理器提取每个JSON对象的唯一键名:
- 设置
Destination为flowfile-attribute(将提取结果存储为FlowFile属性) - 添加自定义属性,例如命名为
target_key,属性值填写$keys()[0]:该表达式会获取当前JSON对象的所有键(每个对象仅一个键),并取第一个元素作为属性值,最终FlowFile会带上target_key=A/target_key=B等属性
3. 按键路由到对应处理器
使用RouteOnAttribute处理器实现精准路由:
- 为每个需要单独路由的键创建规则:
- 规则名称:
route_to_A,匹配条件:${target_key:equals('A')} - 规则名称:
route_to_B,匹配条件:${target_key:equals('B')} - 以此类推,对应所有可能出现的键
- 规则名称:
- 将每个规则的输出连接到对应的后续处理器即可
动态键兼容说明
若Excel生成的JSON键名是完全动态未知的,可简化RouteOnAttribute配置:
- 开启
Dynamic Properties,直接将${target_key}作为路由属性名,NiFi会自动根据属性值创建路由分支,无需提前配置所有键的规则
内容的提问来源于stack exchange,提问作者Pauline Rumyantseva
相关产品推荐
相关产品推荐

