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

如何在NiFi中用JOLT处理器过滤含http前缀URL的JSON数组

JOLT过滤数组对象并保留指定字段的正确写法

直接给你能解决问题的JOLT转换规则,适配你的需求:保留数组中存在url字段且url以http开头的完整对象,同时保留id、code等所有原有属性。

示例输入

假设你的输入JSON结构如下:

[
  {
    "id": 1,
    "code": "A",
    "url": "http://example.com"
  },
  {
    "id": 2,
    "code": "B",
    "url": "ftp://example.net"
  },
  {
    "id": 3,
    "code": "C"
  },
  {
    "id": 4,
    "code": "D",
    "url": "https://test.org"
  }
]

正确JOLT转换规则

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "url": {
          "^http.*": {
            "@2": "[#2]"
          }
        }
      }
    }
  }
]

规则细节解释

  • *:遍历输入数组中的每一个元素
  • url:先定位到当前元素的url字段,以此作为过滤判断的入口
  • ^http.*:用正则匹配url值,确保其以http开头(自动包含https,因为正则匹配的是http起始的任意字符)
  • @2:向上回溯两层,拿到当前元素的完整对象(当前层级是url字段,上一层是数组元素本身,再上一层就是整个元素对象)
  • [#2]:把符合条件的对象按顺序放入新数组,避免生成多余的空元素或重复条目

你之前出现4个元素的原因

大概率是你把id、code等字段单独做了映射,没有嵌套在url的条件判断里。比如错误写法会让每个字段独立生成数组条目,即使url不符合条件,id和code也会被写入数组,导致混入无效对象片段。举个错误写法的例子:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": "[&1].id",
        "code": "[&1].code",
        "url": {
          "^http.*": "[&2].url"
        }
      }
    }
  }
]

示例输出

用正确规则处理示例输入后,会得到符合预期的2个对象:

[
  {
    "id": 1,
    "code": "A",
    "url": "http://example.com"
  },
  {
    "id": 4,
    "code": "D",
    "url": "https://test.org"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:40:04