我有处理器InvokeHTTP,它给出了json结果。 例如:
{
"revision" : {
"clientId" : "dc572274-4b71-11b6-e415-b91e391bcf4d",
"version" : 7
},
"id" : "dc572260-4b71-11b6-0371-f73573ab44fe",
"uri" : "http://x.x.x.x:9090/nifi-api/processors/dc572260-4b71-0371-73ab44fe",
"position" : {
"x" : -1021.9568138214972,
"y" : 333.2029958718132
}
}
我想为InvokeHTTP的每个传入响应动态更改版本的值。 如何实现这个目标?
答案 0 :(得分:1)
我可以建议使用groovy
语言
import groovy.json.*
def ff = session.get()
if(!ff) return
ff = session.write(ff, {rawIn, rawOut->
//parse flowfile content to maps & arrays
def json = new JsonSlurper().parse(rawIn, "UTF-8")
//change json
json.revision.version = (json.revision.version as Long) + 1
//write to output changed content
rawOut.withWriter("UTF-8"){ it.write( JsonOutput.toJson(json) )}
} as StreamCallback)
session.transfer(ff, REL_SUCCESS)
答案 1 :(得分:1)
您可以使用以下处理器序列:EvaluateJsonPath
获取属性值,UpdateAttribute
更改它,ReplaceText
使用正则表达式替换新内容中的旧值。
对于ReplaceText
处理器,请使用以下参数:
Regexp Replace
策略
搜索值:(?s)("version"\s*:\s*)(\d+)
替换值:$1${VERSION}
(其中VERSION是保存新值的属性名称)
这是测试正则表达式的一个很好的资源: https://regex101.com/r/JOrZNp/1