如何在NiFi中统一规范流入FlowFile的JSON字段顺序?
在NiFi中统一JSON对象的字段顺序
针对输入JSON数组中对象字段顺序不一致的问题,推荐以下两种实现方式:
方法一:使用JoltTransformJSON处理器(推荐)
JoltTransformJSON是NiFi专门用于JSON结构转换的处理器,无需编写代码即可实现字段顺序统一:
- 将
JoltTransformJSON处理器添加到你的数据流中,连接到输入FlowFile的上游组件。 - 打开处理器配置界面,在Jolt Specification中填入以下Shift变换规则:
[ { "operation": "shift", "spec": { "*": { "user": "[&1].user", "dept": "[&1].dept", "os": "[&1].os" } } } ]
- 规则说明:
*匹配数组中的每一个对象,[&1]保留原数组的索引位置,通过依次声明user、dept、os的映射关系,强制输出对象的字段顺序。
- 保持Input JSON Path和Output JSON Path为空(默认处理整个FlowFile内容),保存配置并启动处理器。
方法二:使用ExecuteScript处理器(自定义脚本实现)
如果需要更灵活的逻辑,可以用Groovy脚本实现字段重排:
- 添加
ExecuteScript处理器,配置Script Language为Groovy。 - 在Script Body中填入以下代码:
import groovy.json.JsonSlurper import groovy.json.JsonBuilder def flowFile = session.get() if (!flowFile) return // 读取并解析FlowFile中的JSON内容 def jsonContent = flowFile.read().text def jsonArray = new JsonSlurper().parseText(jsonContent) // 按指定顺序重新构建每个JSON对象 def orderedArray = jsonArray.collect { item -> [ user: item.user, dept: item.dept, os: item.os ] } // 将处理后的JSON写回FlowFile def outputJson = new JsonBuilder(orderedArray).toPrettyString() flowFile.write(outputJson) session.transfer(flowFile, REL_SUCCESS)
- 保存配置并启动处理器,FlowFile经过处理后会输出字段顺序统一的JSON数组。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

