NiFi JoltTransformJSON如何将转换结果封装到input字段并新增isInput字段
问题解答
方案1:仅使用JoltTransformJSON实现(推荐)
完全可以仅通过修改JOLT Spec实现目标需求,无需额外引入其他处理器。你可以将原来的JOLT Spec替换为如下内容:
[ { "operation": "shift", "spec": { "*": { "id": "input[&1].id" } } }, { "operation": "default", "spec": { "input": { "*": { "Status": "null", "Expired": "null", "First_Name": "null" } }, "isInput": true } } ]
上述Spec的逻辑说明:
- 第一步
shift操作将原数组中每个元素的id字段映射到根节点下input数组的对应位置,而非直接生成根数组 - 第二步
default操作同时完成两个逻辑:给input数组的每个元素补充缺失的三个默认字段,同时在根节点新增isInput字段并赋值为true
转换后直接输出符合预期的JSON结构。
方案2:使用ReplaceText实现(不推荐)
如果确实需要走ReplaceText的方案,操作步骤如下:
- 提取流内容为属性:在JoltTransformJSON处理器后新增
ExtractText处理器,添加自定义属性input,属性值填写正则表达式(.+),同时勾选Dot All配置项,即可将Jolt输出的JSON数组完整提取为名为input的流文件属性。 - 配置ReplaceText:
- 搜索值填写
(?s)(^.*$) - 替换值填写
{ "isInput": true, "input": ${input} }- 替换策略选择
Replace entire text,字符集配置为UTF-8即可。
- 搜索值填写
注意:该方案存在JSON转义风险,若内容中包含双引号、换行符等特殊字符可能导致最终JSON格式错误,因此优先推荐方案1。
内容的提问来源于stack exchange,提问作者likeGreen
相关产品推荐
相关产品推荐

