如何在Apache NiFi中用Jolt/ReplaceText处理器展平多层JSON数组
Apache NiFi实现JSON嵌套数组展平的两种方法
需求说明
输入JSON:
{ "id": 9256123, "data": [ { "id": 242424, "attributes": [ { "currency": "EUR", "price": "99,99" } ] }, { "id": 22222, "attributes": [ { "currency": "EUR", "price": "299,99" } ] } ] }
期望输出JSON:
{ "id": 9256123, "data": [ { "id": 242424, "currency": "EUR", "price": "99,99" }, { "id": 22222, "currency": "EUR", "price": "299,99" } ] }
方法一:使用JoltTransformJSON处理器
Jolt是NiFi中专门处理JSON结构转换的工具,适合复杂嵌套结构调整,步骤如下:
- 添加
JoltTransformJSON处理器到流程,连接输入数据源。 - 配置核心参数:
- Jolt Specification:选择
Inline类型,粘贴以下转换规则:[ { "operation": "shift", "spec": { "id": "id", "data": { "*": { "id": "data[&1].id", "attributes": { "*": { "currency": "data[&3].currency", "price": "data[&3].price" } } } } } } ] - Jolt Specification DSL:保持默认的
Chainr即可。
- Jolt Specification:选择
规则说明
shift操作负责字段重映射:- 保留顶层
id字段不变; - 遍历
data数组的每个元素(*通配符),保留元素自身的id; - 深入
attributes数组子元素,将currency和price映射到对应data元素层级(&3表示向上回溯3层的数组索引,对应data数组当前元素位置)。
- 保留顶层
方法二:使用ReplaceText处理器
如果JSON结构固定(attributes数组仅含一个对象,字段固定为currency和price),可通过正则替换快速实现,步骤如下:
- 添加
ReplaceText处理器到流程,连接输入数据源。 - 配置核心参数:
- Search Value:选择
Regular Expression,输入正则:"attributes":\s*\[\s*\{\s*"currency":\s*"([^"]+)"\s*,\s*"price":\s*"([^"]+)"\s*\}\s*\] - Replacement Value:输入替换内容:
"currency": "$1", "price": "$2" - Replacement Strategy:选择
Replace All; - Character Set:设置为
UTF-8。
- Search Value:选择
正则说明
\s*匹配任意空白字符(兼容JSON中的换行、空格格式);([^"]+)捕获currency和price的字段值,替换时通过$1、$2引用捕获内容;- 整体匹配
attributes数组的完整结构,替换为展平后的字段。
内容的提问来源于stack exchange,提问作者marcuswebber
相关产品推荐
相关产品推荐

