apache nifi-按字段值拆分json行

时间:2018-11-29 21:47:42

标签: json groovy apache-nifi jolt

在Apache Nifi中,我想根据逗号分隔的字段的内容拆分json文件的一行。

这是我的输入流文件的一个示例:

{
    "name":"app",
    "os":"linux",
    "instance":"instance1,instance2,instance3,instance4"
}

这是想要的输出:

{
    "name":"app",
    "os":"linux",
    "instance":"instance1"
},
{
    "name":"app",
    "os":"linux",
    "instance":"instance2"
},
{
    "name":"app",
    "os":"linux",
    "instance":"instance3"
},
{
    "name":"app",
    "os":"linux",
    "instance":"instance4"
}

我需要知道是否可以使用joltTransformJson处理器来实现此任务,或者我是否必须使用脚本来完成此任务,在这种情况下,请您显示一些类似的示例脚本。

谢谢

1 个答案:

答案 0 :(得分:1)

不知道震动。

使用ExecuteGroovyProcessor,您可以通过以下方式进行此转换:

import groovy.json.*

def ff=session.get()
if(!ff)return
//read stream, convert to reader, parse to objects
def json=ff.read().withReader("UTF-8"){r-> new JsonSlurper().parse(r) }
//transform json
json = json.instance.split(',').collect{e-> json+[instance:e] }
//write
ff.write("UTF-8"){w-> new JsonBuilder(json).writeTo(w)}
//transfer to success
REL_SUCCESS<<ff

ExecuteScript处理器相同:

import groovy.json.*

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

ff = session.write(ff, {inputStream, outputStream ->
    def json=inputStream.withReader("UTF-8"){r-> new JsonSlurper().parse(r) }
    json = json.instance.split(',').collect{e-> json+[instance:e] }
    outputStream.withWriter("UTF-8"){w-> new JsonBuilder(json).writeTo(w)}
} as StreamCallback)

session.transfer(ff, REL_SUCCESS)