如何在Apache NiFi中用JoltTransformRecord将XML转JSON并提取子分类数据
Apache NiFi 实现XML转指定格式JSON操作步骤
1. 控制器服务配置
首先需要在NiFi中配置两个控制器服务:
- XMLReader:用于解析输入的XML数据为Record结构
核心配置项:Wrap Data in Root Node:设为true,原XML没有统一顶层根节点,开启后会自动封装根节点避免解析报错Use Field Name As Element Name:设为true
- JsonRecordSetWriter:用于输出转换后的JSON数据
核心配置保持默认即可,可根据需要调整是否美化输出、是否输出数组包裹。
2. JoltTransformRecord 组件配置
在JoltTransformRecord组件的配置页中,选择上述配置好的XMLReader和JsonRecordSetWriter,Jolt Transformation DSL选择Chain,将以下Jolt规则填入Jolt Specification框中:
[ { "operation": "shift", "spec": { "Category": { "*": { "SubCategory": { "*": { "@(2,CategoryID)": "[&3][&1].CategoryID", "SubID": "[&3][&1].SubID", "Type": "[&3][&1].Type" } } } } } }, { "operation": "shift", "spec": { "*": { "*": "[]" } } } ]
规则说明:首先遍历所有Category节点,对每个Category下的SubCategory节点,将所属父级的CategoryID关联到对应SubCategory属性中,按Category分组生成二维数组,再将二维数组扁平化,最终输出所有SubCategory组成的一维数组。
3. 输出示例
转换后的JSON格式如下:
[ {"CategoryID": "1", "SubID": "10", "Type": "A"}, {"CategoryID": "1", "SubID": "11", "Type": "B"}, {"CategoryID": "2", "SubID": "10", "Type": "A"}, {"CategoryID": "2", "SubID": "11", "Type": "B"} ]
注意事项
如果需要同时保留Header节点的信息,可在Jolt规则的第一个shift操作中新增Header属性映射逻辑即可。
内容的提问来源于stack exchange,提问作者Coe john
相关产品推荐
相关产品推荐

