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

Apache NiFi中基于Jolt实现条件保留/丢弃数据及值异常解决

Jolt条件过滤:保留匹配数据/丢弃不匹配数据

业务需求

对输入JSON的键值对执行条件判断:

  • 若SourceNameCopy的值为network或hardware,则保留整条原始数据
  • 若不匹配,则丢弃整条数据(返回null)

输入JSON

{
  "id": 30006,
  "SourceName": "network",
  "Number": 1,
  "SourceNameCopy": "network",
  "currenttime": "Thu Aug 30 21:19:27 IST 2022"
}

当前使用的Jolt规则(存在问题)

[
  {
    "operation": "shift",
    "spec": {
      "SourceNameCopy": {
        "network": {
          "@1": "&2",
          "#id": "id",
          "#SourceName": "SourceName",
          "#Number": "Number",
          "#currenttime": "currenttime"
        },
        "hardware": {
          "@1": "&2",
          "#id": "id",
          "#SourceName": "SourceName",
          "#Number": "Number",
          "#currenttime": "currenttime"
        }
      }
    }
  }
]

现有问题

当前规则中使用#key的写法是硬编码字符串值,导致输出的字段值都是字段名本身(比如id字段的值是字符串"id",而非原始数据的30006),不符合预期。

修复后的Jolt规则

要实现匹配时保留原始数据,不匹配返回null,可以通过shift操作结合根路径引用实现:

[
  {
    "operation": "shift",
    "spec": {
      "SourceNameCopy": {
        "network|hardware": {
          "@2": ""
        }
      }
    }
  },
  {
    "operation": "default",
    "spec": null
  }
]

规则说明

  1. shift操作:
    • network|hardware用于匹配SourceNameCopy的目标值,支持多值匹配
    • @2表示向上回溯2层路径,直接引用整个原始输入的JSON对象
    • ""将匹配到的原始数据赋值给根节点,最终输出完整原始数据
  2. default操作:
    • 当shift操作无匹配结果时,自动将输出设置为null,实现不匹配时丢弃数据的需求

测试结果

  • 当SourceNameCopy为network或hardware时,输出与原始输入完全一致
  • 当SourceNameCopy为其他值时,输出null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:09:22