我有一个名为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)
你能帮忙吗?
谢谢
答案 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