在Apache NIFi中使用ContentMerge在Append JSON文件中需要帮助

时间:2017-06-21 03:45:12

标签: json apache-nifi

我正在尝试合并一个包含多个对象的JSON文件。下面是我的Oringinal JSON文件。

 {
 "applicant": {
        "full-name": "Tyrion Lannister",
        "mobile-number" : "8435739739",
        "email-id" : "tyrionlannister_casterlyrock@gmail.com"
    },
    "product": {
        "product-category" : "Credit Card",
        "product-type" : "Super Value Card - Titanium"
    }
}

我将从其他来源获得更多JSON数据,如下所示。

{
    "flags": {
        "duplicate-flag" : "No"
        "contact-flag" : "Yes"
         }
}

我的任务是将新的JSON作为新对象附加到旧的JSON recods中,如下所示。

 {
 "applicant": {
        "full-name": "Tyrion Lannister",
        "mobile-number" : "8435739739",
        "email-id" : "tyrionlannister_casterlyrock@gmail.com"
    },
    "product": {
        "product-category" : "Credit Card",
        "product-type" : "Super Value Card - Titanium"
    },
    "flags": {
        "duplicate-flag" : "No"
        "contact-flag" : "Yes"
         }
}

有人可以帮助指导,如何在NiFi中实现?

1 个答案:

答案 0 :(得分:4)

我建议将组件作为流文件属性进行累积,然后使用JavaScript / ECMAScript与ExecuteScript处理器形成合并对象。有时候只有JavaScript的替代品。以下内容可能有效:

flowFile = session.get();
if (flowFile != null) {
    var OutputStreamCallback = Java.type("org.apache.nifi.processor.io.OutputStreamCallback");
    var StandardCharsets = Java.type("java.nio.charset.StandardCharsets");

    // Get attributes
    var applicant = JSON.parse(flowFile.getAttribute("applicant"));
    var product = JSON.parse(flowFile.getAttribute("product"));
    var flags = JSON.parse(flowFile.getAttribute("flags"));

    // Combine
    var merged = {
        "applicant": applicant,
        "product": product,
        "flags": flags
    };

    // Write output content
    flowFile = session.write(flowFile, new OutputStreamCallback(function(outputStream) {
        outputStream.write(JSON.stringify(merged, null, "\t").getBytes(StandardCharsets.UTF_8));
    }));

    session.transfer(flowFile, REL_SUCCESS);
}