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

如何在Apache NiFi中用JoltTransformJson移除含空字段的FlowFile或对象

解决Apache NiFi中移除含空DOB字段的FlowFile问题

你现在的问题出在两个核心点:一是Jolt规则的结构和Split后的单个对象不匹配,二是JoltTransformJson本身只负责修改JSON内容,不会直接删除FlowFile。下面给你两种可行的解决办法:

方法一:RouteOnAttribute + Delete(最直接高效)

既然已经用SplitJSON把数组拆成了单个员工对象的FlowFile,直接用路由处理器判断DOB是否为null,把符合条件的FlowFile删掉就行:

  • 在SplitJSON的下一级添加RouteOnAttribute处理器
  • 在RouteOnAttribute里新增一个属性,比如命名为DeleteNullDOB,表达式填写 ${json.DOB:isNull()}
  • 把RouteOnAttribute的DeleteNullDOB关系连接到Delete处理器,unmatched关系连接到你后续处理有效数据的处理器

方法二:Jolt配合路由(适合一定要用Jolt的场景)

如果非要用Jolt先处理内容,再判断删除,可以这么操作:

  1. 修改JoltTransformJson的规则(适配单个员工对象的结构):
    [
      {
        "operation": "shift",
        "spec": {
          "DOB": {
            "null": "", // 若DOB为null,不输出任何内容
            "*": {
              "@(2)": "[]" // 若DOB非null,保留整个员工对象
            }
          }
        }
      }
    ]
    
  2. 后续添加RouteOnAttribute处理器,新增属性IsEmptyContent,表达式填写 ${content:isEmpty()}
  3. 把IsEmptyContent关系连接到Delete处理器,剩余关系连接到后续流程

你之前配置无效的原因

你之前的Jolt规则是针对rowsToRemove数组下的对象设计的,但Split之后每个FlowFile是单独的员工对象(比如{"name":"张三", "DOB":null}),结构完全不匹配,所以只会移除DOB字段,没法处理整个对象;而且Jolt本身没有删除FlowFile的能力,必须配合路由处理器完成过滤删除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:12:47