apache nifi - 按字段值拆分 json 行
apache nifi - split line of json by field value
在 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 处理器来实现此任务,或者我是否必须使用脚本来完成此任务,在这种情况下,您能否展示一些类似的示例脚本。
谢谢
不知道震动。
使用 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)
在 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 处理器来实现此任务,或者我是否必须使用脚本来完成此任务,在这种情况下,您能否展示一些类似的示例脚本。
谢谢
不知道震动。
使用 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)