请求修正NiFi中JOLTTransformJson的JSON转换规格
JOLTTransformJson 多场景JSON转换规格修正
我在NiFi中使用JOLTTransformJson处理器,输入JSON存在以下4种格式,且遵循规则:
- 单个JSON对象的属性数量可多可少
- 顶层数组包含的对象数量可多可少
- 数组内每个对象的属性结构一致
输入示例
[ { "a": "1" } ]
[ { "a": "1", "b": "2" } ]
[ { "a": "1" }, { "a": "3" } ]
[ { "a": "1", "b": "2" }, { "a": "3", "b": "4" } ]
原转换规格(存在问题)
原规格在多对象/多属性场景下会出现属性值数组化的错误输出:
[ { "operation": "shift", "spec": { "*": { "*": { "$": "[#2].fieldName", "@": "[#2].fieldValue" } } } } ]
修正后的JOLT转换规格
[ { "operation": "shift", "spec": { "*": { "*": { "$": "[#3].[#2].fieldName", "@": "[#3].[#2].fieldValue" } } } } ]
修正逻辑
原规格仅用[#2]定位顶层数组索引,导致同一对象下的多个属性被合并到同一位置的fieldName/fieldValue中,形成数组。修正后:
[#3]锁定顶层数组的对象索引,确保每个源对象对应输出数组中的一个子数组[#2]锁定当前属性在源对象内的顺序位置,让每个属性单独生成一个包含fieldName和fieldValue的对象
输出示例
以第四种输入为例,转换后输出:
[ [ { "fieldName": "a", "fieldValue": "1" }, { "fieldName": "b", "fieldValue": "2" } ], [ { "fieldName": "a", "fieldValue": "3" }, { "fieldName": "b", "fieldValue": "4" } ] ]
内容的提问来源于stack exchange,提问作者Jacob Richard
相关产品推荐
相关产品推荐

