如何用JOLT Transform简化Apache NiFi中的JSON格式转换流程?
可以用JOLT Transform简化流程,完全替代第2到第7步的操作
当然可以,JOLT Transform能一次性完成解析带转义的JSON字符串、转换数据类型、清理格式这些操作,不用再折腾ExtractText和多次ReplaceText。
核心思路
AttributeToJSON输出的是带转义的JSON字符串(比如"{\"pages\":\"2\",\"find\":\"{\\\"name\\\":\\\"Alice\\\"}\",\"sort\":\"[\\\"age\\\",\\\"desc\\\"]\"}"),JOLT可以通过内置的jsonParse和toNumber函数直接处理:
- 先把外层的转义JSON字符串解析成JSON对象
- 对内层嵌套的JSON字符串(比如find、sort的值)再次解析
- 把pages属性转换为数字类型
- 最终输出干净的标准JSON
具体JOLT配置
在NiFi的JOLTTransformJSON处理器中,使用以下JOLT规格:
[ // 解析外层带转义的JSON字符串为对象 { "operation": "modify-overwrite-beta", "spec": { "temp": "=jsonParse(@(1))" } }, // 转换数据类型+解析内层嵌套JSON { "operation": "modify-overwrite-beta", "spec": { "temp": { "pages": "=toNumber", "find": "=jsonParse", "sort": "=jsonParse" } } }, // 移除临时外层节点,输出最终JSON { "operation": "shift", "spec": { "temp": { "*": "&" } } } ]
配置说明
- 第一步
modify-overwrite-beta:用jsonParse(@(1))把流文件内容(AttributeToJSON的输出)解析成JSON对象,存到临时节点temp里 - 第二步:对
temp下的pages执行toNumber转数字,对find和sort用jsonParse解析它们的转义字符串为对应对象/数组 - 第三步
shift:把temp下的所有字段移到根节点,去掉临时节点,得到标准JSON输出
替换效果
这个JOLT处理器直接替代了你原来的:
- AttributeToJSON之后的ExtractText(提取JSON内容)
- 多次ReplaceText(去反斜杠、清理格式)
- 任何转换数据类型的步骤
流程从多步压缩成AttributeToJSON → JOLTTransformJSON两步,更简洁也更稳定。
内容的提问来源于stack exchange,提问作者Navia Ang
相关产品推荐
相关产品推荐

