Apache nifi nifi中JSON到多个JSON对象的数组
我想在Nifi中实现以下请求-响应场景。我的目标是在进一步不同的处理器中使用作为数组的每个值(对象键1,对象键2,…) 因此,如果我可以将其转换为多个JSON,那么使用拆分JSON以后我可以使用多个值 请为此提出各种解决方案 输入JSON:Apache nifi nifi中JSON到多个JSON对象的数组,apache-nifi,Apache Nifi,我想在Nifi中实现以下请求-响应场景。我的目标是在进一步不同的处理器中使用作为数组的每个值(对象键1,对象键2,…) 因此,如果我可以将其转换为多个JSON,那么使用拆分JSON以后我可以使用多个值 请为此提出各种解决方案 输入JSON: [ { "ID": "789654", "Date": "29th Feb", "Key" : ["object key 1", "object key 2", "object key 3"..
[
{
"ID": "789654",
"Date": "29th Feb",
"Key" : ["object key 1", "object key 2", "object key 3"....]
}
]
输出JSON:
[
{
"ID": "789654",
"Date": "29th Feb",
"Key" : ["object key 1", "object key 2", "object key 3"....]
}
]
您可以在输入JSON的每个项的
键
属性上使用.map
函数
以下内容将输出第一个输入值的所需结果。然后可以遍历每个输入对象
const result = input[0].Key.map((key) => {return {ID: input[0].ID, Date: input[0].Date, Key: key}});
您有两个级别的数组。我假设在根数组中可以有几个对象
[
{
"ID" : "111",
"Date" : "29th Feb",
"Key" : ["object key 1", "object key 2", "object key 3", "object key 4"]
},
{
"ID" : "222",
"Date" : "27th Feb",
"Key" : ["object key 5", "object key 6"]
}
]
使用以下流程
- SplitJson-按根数组拆分文件
$
- EvaluateJsonPath-将
和$.ID
值提取到具有相应名称的属性中$.Date
- SplitJson-按
$.Key
- ReplaceText-上一步的结果是无效的json,因为在
键中有一个字符串数组。您必须在内容中使用双引号包装字符串:
->(?s)(^.*$)
“$1”
- EvaluateJsonPath-将字符串从上下文
提取到$
属性中键
- AttributesToJson—从属性构建json的最后一步
非常可选的变体 将
ExecuteGroovyScript
与脚本一起使用:
@Grab(group='acme.groovy',module='acmenifi',version='20190218')
导入静态groovyx.acme.nifi.AcmeNiFi*
withFlowFile(this).withJson{json,attr->
json.each{o1->
o1.键。每个{k1->
//使用json构建新文件
newFlowFile(this).withJson{json2,attr2->
属性2.putAll(属性)
返回o1+[Key:k1]//设置新流程文件的内容
}
}
}
返回空//删除当前文件
}
在哪里可以使用此逻辑?在任何处理器中?