Apache nifi nifi中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"..

我想在Nifi中实现以下请求-响应场景。我的目标是在进一步不同的处理器中使用作为数组的每个值(对象键1,对象键2,…)

因此,如果我可以将其转换为多个JSON,那么使用拆分JSON以后我可以使用多个值

请为此提出各种解决方案

输入JSON:

[
    { 
         "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]//设置新流程文件的内容
}
}
}
返回空//删除当前文件
}

在哪里可以使用此逻辑?在任何处理器中?