如何用NiFi的Jolt Transform提取匹配JSON数组生成指定结构
使用Apache NiFi Jolt Transform实现数组匹配与结构转换
现有如下JSON结构,需要将idByLine数组中idLine与orderLine数组中ID匹配的项,把对应的orderId作为新的idLine字段,同时保留orderLine里的其他字段,最终生成指定格式的数组输出。
输入JSON
{ "orderLine": [ { "ID": "1", "Country": "Country1", "Email": [ { "email1": "email1" }, { "email2": "email2" } ] }, { "ID": "2", "Country": "Country2", "Email": [ { "email1": "email1" }, { "email2": "email2" } ] } ], "idByLine": [ { "idLine": "1", "orderId": "AMD123" }, { "idLine": "2", "orderId": "AMD555" } ] }
期望输出JSON
[ { "idLine": "AMD123", "ID": "1", "Country": "Country1", "Email": [ { "email1": "email1" }, { "email2": "email2" } ] }, { "idLine": "AMD555", "ID": "2", "Country": "Country2", "Email": [ { "email1": "email1" }, { "email2": "email2" } ] } ]
Jolt转换规范(Chain模式)
[ { "operation": "shift", "spec": { "idByLine": { "*": { "idLine": "@(1,orderId).id" } }, "orderLine": "&" } }, { "operation": "shift", "spec": { "orderLine": { "*": { "ID": { "@(2,&)": { "@(4,@(1)).id": "[&3].idLine", "*": "[&3].&" } }, "*": "[&1].&" } } } }, { "operation": "remove", "spec": { "*": { "id": "" } } } ]
转换逻辑说明
- 第一步Shift操作:将
idByLine转换成以idLine值为键、orderId为值的临时映射,同时保留orderLine数组,为后续匹配做准备。 - 第二步Shift操作:遍历
orderLine数组的每一项,用当前项的ID匹配第一步生成的临时映射,把对应的orderId赋值给新的idLine字段,同时原样保留orderLine中的其他字段(如Country、Email),并整理成目标数组结构。 - 第三步Remove操作:清理转换过程中生成的临时节点,保证输出结构整洁。
NiFi配置说明
在Apache NiFi的JoltTransformJSON处理器中,选择Chain作为Jolt Transformation Language,将上述JSON规范粘贴到Jolt Specification框中,输入指定的JSON数据即可得到期望输出。
内容的提问来源于stack exchange,提问作者ODRAXIR
相关产品推荐
相关产品推荐

