NiFi如何从数组提取值并生成带指定键的属性?
解决方案:保留属性名拆分JSON数组生成对应属性
方案一:SplitJSON + UpdateAttribute 组合处理
这是最直观的无代码方案,适合快速实现需求:
- 配置SplitJSON处理器
- 设置
Json Path Expression为$.ocorrencias,处理器会将数组中的每个元素拆分为独立的FlowFile,每个FlowFile的内容就是单个数值(比如129539290)。
- 设置
- 配置UpdateAttribute处理器
- 添加新属性:属性名填
ocorrencias,属性值用表达式${file.content},这样就把拆分后FlowFile的内容赋值给名为ocorrencias的属性。 - 可选操作:若不需要保留FlowFile的原始内容,可添加
Delete Original Content属性并设为true,仅保留目标属性。
- 添加新属性:属性名填
方案二:ExecuteScript 脚本一次性完成
如果想减少处理器数量,可使用ExecuteScript编写简单脚本(以Groovy为例):
import groovy.json.JsonSlurper def flowFile = session.get() if (!flowFile) return flowFile = session.read(flowFile, { inputStream -> def jsonData = new JsonSlurper().parse(inputStream) jsonData.ocorrencias.each { item -> def newFlowFile = session.create(flowFile) newFlowFile = session.putAttribute(newFlowFile, "ocorrencias", item.toString()) session.transfer(newFlowFile, REL_SUCCESS) } } as InputStreamCallback) session.remove(flowFile)
脚本会读取原FlowFile的JSON数据,遍历ocorrencias数组的每个元素,创建新FlowFile并设置对应属性,最后移除原FlowFile。
内容的提问来源于stack exchange,提问作者Rodrigo Hajime Himauari
相关产品推荐
相关产品推荐

