You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache NiFi的JS脚本中替换Emp_Id值(禁用高级API)

在Apache NiFi Execute Script中用JavaScript处理数据(按Emp_Id拆分条目)

可行代码实现

// 从NiFi流文件读取输入数据
var s3Data = JSON.parse(session.read(flowFile).toString());
// 假设response数据已通过其他方式获取(比如API调用结果)
var response = { 
    data: [
        ["EMP001", "John"],
        ["EMP002", "Jane"],
        ["EMP003", "Bob"]
    ] 
};
var result = [];

// 核心处理逻辑
if (s3Data.Emp_Id === "All") {
    response.data.forEach(function(subArr) {
        // 手动复制原数据字段(不使用高级内置方法)
        var newRecord = {};
        for (var key in s3Data) {
            if (s3Data.hasOwnProperty(key)) {
                newRecord[key] = key === "Emp_Id" ? subArr[0] : s3Data[key];
            }
        }
        result.push(newRecord);
    });
} else {
    result.push(s3Data);
}

// 将处理结果写回流文件
flowFile = session.write(flowFile, function(outputStream) {
    outputStream.write(JSON.stringify(result).getBytes("UTF-8"));
});
session.transfer(flowFile, REL_SUCCESS);

关键逻辑说明

  • 字段复制:用for-in循环配合hasOwnProperty遍历s3Data的所有自有字段,手动完成复制与Emp_Id替换,完全规避Object.assign、Object.fromEntries等受限方法。
  • "All"场景处理:遍历response.data的每个子数组,为每个子数组生成一条独立记录,Emp_Id替换为子数组第一个元素,其余字段完全保留原数据。
  • 非"All"场景:直接将原记录加入结果数组,无需额外修改。

常见问题修正

如果你的代码未得到预期结果,大概率是以下问题:

  • 未完整复制原字段:只手动赋值了部分字段,导致输出记录丢失数据,必须遍历所有键确保字段不遗漏。
  • 忽略hasOwnProperty:for-in会遍历对象原型链上的属性,加上该判断可避免引入意外的继承属性。
  • NiFi上下文错误:忘记从flowFile读取输入数据,或未正确将结果写回流文件,导致数据未正常流转。

内容的提问来源于stack exchange,提问作者dash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 13:12:43