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

NiFi ExecuteScript(ECMAScript)数组元素查找报错及语法咨询

NiFi 提取JSON数组指定元素属性的解决方案

先划重点:EvaluateJSONPath 其实能搞定这个需求

不用写脚本,直接用EvaluateJSONPath处理器就能实现:

  1. 配置Destination为flowfile-attribute或flowfile-content
  2. 填写JSONPath表达式:
    $..segments[?(@.REF01 == '0F')].REF02
    
    • 若有多个匹配元素,属性模式下返回逗号分隔的字符串,内容模式下返回JSON数组
    • 匹配元素无REF02时,对应位置会返回null

解决ExecuteScript的问题(若你仍需要脚本实现)

常见问题原因

  1. 箭头函数不能用:NiFi的ExecuteScript默认用Rhino JS引擎,对ES6+箭头函数支持极差,必须用传统语法
  2. NoSuchMethodException:大多是调用了Rhino不支持的ES6方法(比如Array.find()),或错误调用了Java类方法

兼容Rhino的JS脚本示例

假设你的JSON片段如下:

{
  "segments": [
    {"REF01": "0A", "REF02": "val1"},
    {"REF01": "0F"},
    {"REF01": "0F", "REF02": "val2"}
  ]
}

执行脚本(提取第一个匹配元素的REF02,无则返回空):

// 导入NiFi兼容的Java类
var InputStreamReader = Java.type('java.io.InputStreamReader');
var BufferedReader = Java.type('java.io.BufferedReader');
var StandardCharsets = Java.type('java.nio.charset.StandardCharsets');
var JSONParser = Java.type('org.json.JSONParser');

var flowFile = session.get();
if (flowFile != null) {
    // 读取流文件内容
    var inputStream = session.read(flowFile);
    var reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
    var jsonStr = reader.readLine();
    reader.close();
    inputStream.close();

    // 解析JSON
    var jsonObj = new JSONParser().parse(jsonStr);
    var segments = jsonObj.getJSONArray("segments");
    var targetRef02 = "";

    // 遍历数组查找目标元素
    for (var i = 0; i < segments.length(); i++) {
        var segment = segments.getJSONObject(i);
        if (segment.has("REF01") && segment.getString("REF01") === "0F") {
            targetRef02 = segment.has("REF02") ? segment.getString("REF02") : "";
            break; // 找到第一个匹配就退出,若要所有匹配则删除此行
        }
    }

    // 将结果写入流文件属性
    flowFile = session.putAttribute(flowFile, "target_ref02", targetRef02);
    session.transfer(flowFile, REL_SUCCESS);
}

扩展说明

  • 若要提取所有匹配的REF02,删除循环里的break,将结果存入数组后拼接成字符串或JSON数组
  • 脚本中使用org.json库是NiFi默认支持的,避免引入额外依赖导致的异常

内容的提问来源于stack exchange,提问作者Abhai Raj Llewellyn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:30:48