如何在NiFi中确保datasum字段仅传入整数值
实现方案建议
一、Python脚本处理方案
直接编写脚本遍历JSON数组,完成字段转换与新增:
- 将原字段
detail重命名为parametername - 检查
datasum类型:若为字符串则替换为整数0,整数类型直接保留 - 新增固定字段
severity: "1"和createdby: "ApacheNifi"
示例代码
import json # 输入JSON数据 input_data = ''' [ { "hostname": "ip-192-168-1-1.demo-sample.com", "detail": "Host name", "datasum": "ip-192-168-1-1.demo-sample.com", "toolname": "nifi", "datacount": "1" }, { "hostname": "demo-env", "detail": "System information", "datasum": "Windows DEMO-ENV 10.0.19 Microsoft Windows Server 2016", "toolname": "nifi", "datacount": "1" } ] ''' # 解析并处理数据 raw_data = json.loads(input_data) processed_list = [] for entry in raw_data: processed_entry = { "hostname": entry["hostname"], "parametername": entry["detail"], # 处理datasum字段 "datasum": 0 if isinstance(entry["datasum"], str) else entry["datasum"], "toolname": entry["toolname"], "datacount": entry["datacount"], # 新增固定字段 "severity": "1", "createdby": "ApacheNifi" } processed_list.append(processed_entry) # 输出格式化后的JSON print(json.dumps(processed_list, indent=2))
二、Apache NiFi流处理方案
如果数据在NiFi管道中流转,用以下处理器组合实现:
- EvaluateJsonPath:提取
detail字段的值存入自定义属性parametername - UpdateRecord:配置JSON格式的读写器,完成三项操作:
- 重命名字段:将
detail替换为parametername - 修正
datasum:添加规则,当字段类型为字符串时设为0,整数则保留原值 - 新增固定字段:添加
severity值为"1",createdby值为"ApacheNifi"
- 重命名字段:将
- PutFile/PutDatabaseRecord:将处理后的JSON输出到目标存储或数据库
UpdateRecord核心配置
在Record Path Value中添加以下规则:
/parametername:${detail}/datasum:if(type(/datasum) == 'STRING', 0, /datasum)/severity:"1"/createdby:"ApacheNifi"
内容的提问来源于stack exchange,提问作者self lab
相关产品推荐
相关产品推荐

