在Apache Nifi中修改JSON属性值

时间:2018-07-03 13:13:54

标签: apache-nifi

我有一个名为STATUS的属性,它是JSON格式,如下所示:

{  
   "id":"343533",
   "status":false,
   "itemSize":0
}

我非常希望能够通过Groovy Execute脚本修改itemSize值,然后再将其传递到另一个自定义处理器上。我正在努力寻找一种方法来单独修改此类键值对的值。我希望能够执行与以下操作类似的操作,其中遍历所有键值对,如果键的值为零,则将其替换为任何数值。但是,以下示例仅适用于顶级属性,不允许修改或删除属性值中的特定键值对。

def flowFile=session.get()
if(!flowFile)return
def zeroValueAttr = flowFile.getAttributes().findAll{it.value==0}.collect{it.key}
flowFile.removeAllAttributes(zeroValueAttr )
session.transfer(flowFile, REL_SUCCESS)

你能帮忙吗?

谢谢

1 个答案:

答案 0 :(得分:2)

以下代码适用于ExecuteGroovyScript处理器

import groovy.json.JsonSlurper
import groovy.json.JsonBuilder

def ff=session.get()
if(!ff)return

//read flow file content and parse it
def body = ff.read().withReader("UTF-8"){reader-> 
    new JsonSlurper().parse(reader) 
}

//replace some values
body.each{
    if(it.value==0)it.value=123
}

//write new flow file content
ff.write("UTF-8"){writer-> 
    new JsonBuilder(body).writeTo(writer) 
}
//transfer
REL_SUCCESS << ff