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

如何使用JOLT或NiFi工具拆分JSON的id字段提取UTM参数?

用JOLT或NiFi实现UTM参数解析需求

需求说明

输入JSON

[
  {
    "id": "28573041|utm_source=vodafone&utm_medium=banner&utm_campaign=smartphones",
    "date": "2022-05-03"
  },
  {
    "id": "28573041|utm_campaign=Vodafone_uppers_2022",
    "date": "2022-05-03"
  }
]

解析规则

  • |之前的内容为真实ID,替换原id字段值
  • =之前为参数属性名,之后为属性值,需将这些键值对作为新字段添加到对象中
  • 支持的参数仅为:utm_source、utm_medium、utm_campaign、utm_term、utm_content,顺序不固定

目标输出JSON

[
  {
    "id" : "28573041",
    "date" : "2022-05-03",
    "utm_source" : "vodafone",
    "utm_medium" : "banner",
    "utm_campaign" : "smartphones"
  },
  {
    "id" : "28573041",
    "date" : "2022-05-03",
    "utm_campaign" : "Vodafone_uppers_2022"
  }
]

JOLT转换方案

可以通过JOLT规范实现上述解析,以下是对应的JOLT转换规则:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "id_parts": "=split('|', @(1,id))",
        "real_id": "@(1,id_parts[0])",
        "params_str": "@(1,id_parts[1])",
        "params_list": "=split('&', @(1,params_str))"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "real_id": "[&1].id",
        "date": "[&1].date",
        "params_list": {
          "*": {
            "@": "[&3].temp"
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "temp": {
          "*": "=split('=', @)"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": "[&1].id",
        "date": "[&1].date",
        "temp": {
          "*": {
            "0": "[&3].key",
            "1": "[&3].value"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": "[&1].id",
        "date": "[&1].date",
        "key": {
          "*": {
            "@(2,value[&1])": "[&4].@"
          }
        }
      }
    }
  },
  {
    "operation": "remove",
    "spec": {
      "*": {
        "key": "",
        "value": ""
      }
    }
  }
]

规则说明

  1. 拆分ID字段:将原id按|拆分为真实ID和参数字符串,再将参数字符串按&拆分为单个参数列表
  2. 提取键值对:将每个参数按=拆分为键和值的数组
  3. 映射字段:将键值对映射为对象的新字段,保留原date字段
  4. 清理临时字段:移除转换过程中生成的临时辅助字段

NiFi实现步骤

在NiFi中可以通过JoltTransformJSON处理器快速实现该需求:

  1. 添加JoltTransformJSON处理器到流程中
  2. 配置处理器的Jolt Specification为上述JOLT规则
  3. 将原始JSON数据作为输入连接到该处理器
  4. 处理器输出即为解析后的目标JSON格式

如果不使用JOLT,也可以通过SplitText、ReplaceText、EvaluateJsonPath等处理器组合实现,但JOLT方案更简洁高效,适合结构化的JSON转换场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:06:24