apache-nifi - JSON 数组到 nifi 中的多个 JSON 对象

标签 apache-nifi

我想在 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",

            "Key1" : "object key 1"

           },

           { 

             "ID": "789654",

            "Date": "29th Feb",

            "Key2" : "object key 2"

           },

          { 

             "ID": "789654",

            "Date": "29th Feb",

            "Key3" : "object key 3"

           },
           .
           .
           .
           .
           .
           .

         ]

最佳答案

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

[
    {
        "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
}

关于apache-nifi - JSON 数组到 nifi 中的多个 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54720905/

相关文章:

java - NoClassDefFound错误: org/apache/nifi/registry/VariableRegistry while running nifi test cases

elasticsearch - 使用NiFi仅消耗新的ElasticSearch文档

hadoop - 使用 ConsumeKafka 处理器时创建更大的 NiFi 流文件

apache-nifi - 从平面文件读取数据后如何从 Nifi Flow File 中仅提取几列

apache-nifi - 如何使用 NiFi 将字符串转换为 JSON 数组

apache-nifi - kylo 摄入饲料错误

http - NiFi中的重试和失败队列优先级

hadoop - nifi ConvertRecord JSON 到 CSV 只得到一条记录?

apache-nifi - 在 Nifi ExecuteScript 中导入模块

docker - 使用Docker时如何在群集NiFi中外部化授权和用户文件?