JSON的数组Mupliple在nifi JSON对象(Array of JSON to Mupli

2019-11-05 12:08发布

我想实现在Nifi下面的请求 - 响应方案。 我的目标是在进一步differt处理器使用的每个值来作为数组(对象键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",

            "Key1" : "object key 1"

           },

           { 

             "ID": "789654",

            "Date": "29th Feb",

            "Key2" : "object key 2"

           },

          { 

             "ID": "789654",

            "Date": "29th Feb",

            "Key3" : "object key 3"

           },
           .
           .
           .
           .
           .
           .

         ]

Answer 1:

你有两个层次排列。 我假设根数组中你可以有几个对象

[
    {
        "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因为你有一个字符串数组Key 。 你必须包装字符串中的内容与双引号: (?s)(^.*$) - > "$1"
  • EvaluateJsonPath -提取字符串从上下文中$Key属性
  • AttributesToJson - 打造JSON的最后一步,从属性

非常另类变种

使用ExecuteGroovyScript与脚本:

@Grab(group='acme.groovy', module='acmenifi', version='20190218')
import static groovyx.acme.nifi.AcmeNiFi.*

withFlowFile(this).withJson{json,attr->
    json.each{o1->
        o1.Key.each{k1-> 
            //build new file with json
            newFlowFile(this).withJson{json2,attr2->
                attr2.putAll(attr)
                return o1 + [Key:k1] //set content of new flow file
            }
        }
    }
    return null //drop current file
}


Answer 2:

您可以使用.map上的功能Key输入JSON的项目中的每一个属性。

下面将输出的第一输入值的期望的结果。 然后,您可以通过迭代每个输入对象。

const result = input[0].Key.map((key) => {return {ID: input[0].ID, Date: input[0].Date, Key: key}});


文章来源: Array of JSON to Mupliple JSON Object in nifi
标签: apache-nifi