如何通过NiFi处理器高效转换远程动态JSON数据(表格型嵌套数组转对象数组)
高效实现方案:用JoltTransformJSON处理器
这个需求完全可以通过NiFi原生的JoltTransformJSON处理器高效搞定,它专门用于JSON结构转换,性能出色,还能完美适配你这种动态表头的场景——不管远程返回的表头字段有多少,只要格式是values数组里第一行是表头、后续是数据行,就能自动完成转换。
具体实现步骤
1. 拉取远程动态JSON数据
首先用InvokeHTTP处理器获取远程的JSON数据:
- 设置HTTP Method为
GET - 在Remote URL中填入提供JSON数据的远程地址
- 可以根据需求配置超时时间、重试策略,确保能稳定获取数据
2. 配置Jolt转换规则
添加JoltTransformJSON处理器,将InvokeHTTP的success连接关系指向它,然后配置核心的Jolt转换规则:
- 选择Jolt Specification为
Inline Jolt Spec,粘贴以下转换规则:
[ { "operation": "shift", "spec": { "values": { "0": { "*": "headers[&1]" }, "*": { "@(1,headers)": { "*": { "@(2,&1)": "output[#3].&" } } } } } }, { "operation": "remove", "spec": { "headers": "" } } ]
- 这个规则的作用:
- 先把
values数组的第一行(表头)提取到临时的headers数组中 - 遍历后续每一行数据,将表头字段作为key,对应位置的数值作为value,组装成对象并放入
output数组 - 最后移除临时的
headers字段,只保留我们需要的对象数组
- 先把
3. 验证或输出结果
- 可以用
LogAttribute处理器,开启Log Payload选项,直接在日志里查看转换后的JSON结构是否符合预期 - 或者用
PutFile处理器将结果写入文件,也可以根据业务需求对接其他下游处理器
优化建议
- 如果处理的是大流量数据,可以在
JoltTransformJSON的Scheduling配置中设置Concurrent Tasks为大于1的数值,开启并行处理提升效率 - 可以在转换前添加
ValidateJson处理器,验证输入JSON的格式合法性,避免无效数据导致转换失败
内容的提问来源于stack exchange,提问作者Neeraj
相关产品推荐
相关产品推荐

