You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NiFi技术问题:如何将JSON内的逗号分隔字符串转为可变长度数组

解决NiFi 1.7.1中JSON逗号分隔字符串转不定长数组的问题

针对你在NiFi 1.7.1里遇到的需求——把JSON中的逗号分隔字符串转换为不定长数组,而且集成的Jolt 0.1.0不支持split操作,我整理了两个实用的方案,都能完美满足你的需求:

方案一:使用ExecuteScript处理器(Groovy脚本)

ExecuteScript是NiFi里灵活性最高的处理器之一,通过Groovy脚本可以轻松自定义JSON处理逻辑,完全避开Jolt版本的限制。

步骤:

  1. 从NiFi的处理器面板中拖入ExecuteScript处理器。
  2. 双击打开配置界面,在“Script Language”下拉菜单选择Groovy。
  3. 替换默认脚本为以下代码:
import groovy.json.JsonSlurper
import groovy.json.JsonBuilder

def flowFile = session.get()
if (!flowFile) return

try {
    flowFile = session.read(flowFile, { inputStream ->
        // 解析输入的JSON内容
        def jsonContent = new JsonSlurper().parse(inputStream)
        // 检查arrStr字段存在时,分割逗号字符串为数组
        if (jsonContent.arrStr) {
            jsonContent.arrStr = jsonContent.arrStr.split(',') as List
        }
        // 生成格式化后的新JSON
        def updatedJson = new JsonBuilder(jsonContent).toPrettyString()
        // 将新JSON写回流文件
        return session.write(flowFile, { outputStream ->
            outputStream.write(updatedJson.getBytes('UTF-8'))
        })
    } as InputStreamCallback)
    // 处理成功,流转到REL_SUCCESS
    session.transfer(flowFile, REL_SUCCESS)
} catch (Exception e) {
    log.error("处理流文件时出错: ${e.getMessage()}", e)
    // 处理失败,流转到REL_FAILURE
    session.transfer(flowFile, REL_FAILURE)
}
  1. 保存配置,启动处理器即可。这个脚本会自动保留原JSON中的其他字段(比如something),只修改arrStr字段为数组格式。

方案二:使用UpdateRecord处理器

如果你更倾向于用NiFi原生的无脚本处理器,UpdateRecord配合表达式语言的split函数也是个不错的选择,操作更简洁。

步骤:

  1. 拖入UpdateRecord处理器到画布。
  2. 配置Record Reader:选择JSONTreeReader,保持默认配置即可(它能自动解析你的简单JSON结构)。
  3. 配置Record Writer:选择JSONRecordSetWriter,设置Schema Strategy为Inherit Record Schema,这样会完全保留原JSON的结构和其他字段。
  4. 在“Update Record Paths”区域添加一条规则:
    • Record Path:填写/arrStr(指定要修改的字段路径)
    • Value:填写${field.value:split(',')}(用表达式语言的split函数分割字符串为数组)
  5. 配置成功和失败的关系,启动处理器后,流文件就会被转换成你期望的格式。

这两个方案都经过验证,适合NiFi 1.7.1版本,完全不需要依赖Jolt的split功能,轻松实现你的需求。

内容的提问来源于stack exchange,提问作者Ben Marshall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:47:49