NiFi中基于通配符过滤JSON键并实现指定结构转换求助
NiFi实现指定JSON结构转换方案
针对你需要将包含ABC#nn、TTT#nn及无关键值对的JSON,转换为以TTT#nn值为键、对应ABC#nn为值的结构,可通过JoltTransformJSON处理器实现,具体步骤如下:
核心思路
利用Jolt的声明式转换规则,自动匹配所有ABC#nn与TTT#nn的对应关系,丢弃无关键值对,同时完成结构重组。
处理器配置
- 添加
JoltTransformJSON处理器,接入待处理的JSON数据流。 - 在Jolt Specification中填入以下转换规则:
[ { "operation": "shift", "spec": { "TTT#*": { "$": "@(1,&)", "#ABC#&": { "@(2,ABC#&)": "&" } } } }, { "operation": "modify-overwrite-beta", "spec": { "*": { "ABC#*": "=toInteger" } } } ]
规则说明
- Shift操作:
TTT#*匹配所有以TTT#开头的键,*捕获编号nn;$引用当前TTT#nn的数值,作为新JSON的顶层键;#ABC#&生成对应的ABC#nn键(&复用之前捕获的nn);@(2,ABC#&)向上回溯两层,获取原JSON中对应ABC#nn的值,赋值给新结构中的ABC#nn键。
- Modify操作(可选):
- 将
ABC#nn的浮点数(如1.0)转换为整数(如1),不需要此转换可直接删除该操作块。
- 将
- Jolt Transform DSL选择
Chain,支持多步骤转换。
注意事项
- 若原JSON中存在多个
TTT#nn值重复的情况,后出现的键值对会覆盖之前的,需根据业务场景提前处理重复值; - 该规则会自动丢弃所有非
ABC#nn、TTT#nn的键值对,无需额外配置过滤逻辑。
内容的提问来源于stack exchange,提问作者JimF
相关产品推荐
相关产品推荐

