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

Apache NiFi ExecuteScript处理器JS代码成功场景误判求助

Apache NiFi ExecuteScript JavaScript 代码优化问题

注意:NiFi处理器不支持isEmpty()、Object.Entries等JavaScript内置函数/方法,必须编写基础代码

当前代码在成功场景下也会返回Failure,需求为校验变量temp的值与API响应是否匹配,包含以下5种场景:

  • temp的值存在于API响应中且匹配,判定为pass;
  • temp有值但API响应无对应值,判定为fail;
  • temp有值但API响应为空,判定为fail;
  • temp为空但API响应非空,判定为pass(仅需校验temp);
  • temp与API响应均无数据,判定为pass;

属性中的数据示例

ListData=
{
  "Emp_Id" : 121314,
  "Emp_Loc_Id" : 126,
  "Dept_Name" : "Flowers",
  "Sub_Debt_Name1" : "Lily"
}


apiData = 
{
  "status" : "success",
  "data" : {
    "noMoreWorkFlow" : 0,
    "reason" : {
      "labels" : "",
      "options" : {
        "17" : [ "Rose", "" ],
        "12" : [ "Tulips", "" ],
        "23" : [ "MaryGold", "" ]
      }
    },
    "workflow" : [ ],
    "orgContext" : [ ]
  }
}

Sub_Debt_Name1= Lily

此场景下,结果应为0且temp_Status = fail,因为apiData中没有匹配的数据

现有代码

var InputStreamCallback = Java.type("org.apache.nifi.processor.io.InputStreamCallback")
var IOUtils = Java.type("org.apache.commons.io.IOUtils");
var OutputStreamCallback =  Java.type("org.apache.nifi.processor.io.OutputStreamCallback");
var StandardCharsets = Java.type("java.nio.charset.StandardCharsets");
var Set = Java.type("java.util.HashSet");
var Map = Java.type("java.util.HashMap");
var flowFile = session.get();

if (flowFile != null) {
    var text = ''
    session.read(flowFile,
        new InputStreamCallback(function (inputStream) {
            text = IOUtils.toString(inputStream, StandardCharsets.UTF_8);             
        }));
var Data ={}
var api={}
var temp_Status = ""
var res=0
var hasApiData=false;

var Data = JSON.parse(flowFile.getAttribute('ListData'))
var api= JSON.parse(flowFile.getAttribute('apiData'))
var x= JSON.stringify(flowFile.getAttribute('Sub_Debt_Name1')) 
var temp= JSON.parse(x)

   for(var key in api.data.reason.options){
     hasApiData= true;
   }
  var dataName = temp;
   if((!(hasApiData)) &&(!(dataName))){
    temp_Status = "fail";   
    } 
   if(hasApiData===true){
   for (var key in api.data.reason.options) {
   if (api.data.reason.options[key][0] === dataName) {
    res = JSON.parse(key);
    temp_Status = "pass";       
    }else{
      temp_Status = "fail"; 
    }
  }
   flowFile = session.putAttribute(flowFile, 'temp_Status ', temp_Status );
        
}
}     
 flowFile = session.write(flowFile,
                       new OutputStreamCallback(function(outputStream) {
                              outputStream.write(JSON.stringify(res).getBytes(StandardCharsets.UTF_8))
                       })
              );

   session.transfer(flowFile, REL_SUCCESS);

当前代码即使在成功场景下,temp_Status也会显示Fail,求基于基础JavaScript的优化逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:07:54