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

NiFi中Groovy脚本解析数据返回空数组问题求助

解决Groovy脚本解析Record记录返回空数组的问题

问题场景

输入是包含Message字段的JSON,Message内容里有多条以换行+Record开头的记录,但现有Groovy脚本返回空数组,无法生成期望的JSON数组。

示例数据

输入JSON

{
  "Message": "Some pre-text\nRecord: id=1, name=Alice\nRecord: id=2, name=Bob\nOther irrelevant text\nRecord: id=3, name=Charlie"
}

期望输出

[
  {"id": "1", "name": "Alice"},
  {"id": "2", "name": "Bob"},
  {"id": "3", "name": "Charlie"}
]

常见错误脚本及问题分析

以下是容易导致空数组的典型错误脚本:

def inputJson = new JsonSlurper().parseText(input)
def message = inputJson.Message
def records = message.findAll(/^Record:.*/)
def result = records.collect { record ->
    def props = record.split(/, /).collectEntries { prop ->
        def (key, value) = prop.split(/=/)
        [(key): value]
    }
    props
}
return new JsonBuilder(result).toPrettyString()

核心问题

  • 正则表达式默认是单行模式,^只会匹配整个Message字符串的开头,而非每行的开头,导致无法捕获换行后的Record行。
  • 未处理值中包含等号的情况,split(/=/)会把值错误拆分。

修正后的Groovy脚本

@Grab('org.codehaus.groovy:groovy-json:3.0.17')
import groovy.json.JsonSlurper
import groovy.json.JsonBuilder

// 替换为你的输入JSON字符串
def input = '''
{
  "Message": "Some pre-text\nRecord: id=1, name=Alice\nRecord: id=2, name=Bob\nOther irrelevant text\nRecord: id=3, name=Charlie"
}
'''

def inputJson = new JsonSlurper().parseText(input)
def message = inputJson.Message ?: "" // 处理Message为空的边界情况

// 启用多行模式(?m),匹配每行以Record:开头的内容
def recordMatcher = message =~ /(?m)^Record: (.*)/

def resultList = []
while (recordMatcher.find()) {
    def recordContent = recordMatcher.group(1).trim()
    // 解析键值对,split(/=/, 2)确保值含等号时不被拆分
    def recordMap = recordContent.split(/, ?/).collectEntries { entry ->
        def (key, value) = entry.split(/=/, 2)
        [(key.trim()): value.trim()]
    }
    resultList.add(recordMap)
}

// 输出结果
println new JsonBuilder(resultList).toPrettyString()

关键优化点

  1. 多行模式正则:添加(?m)标记,让^匹配每行的起始位置,正确捕获所有Record开头的行。
  2. 健壮的键值解析:用split(/=/, 2)限制拆分次数,避免值中包含等号时解析错误;同时用trim()去除多余空格。
  3. 空值处理:message ?: ""确保当Message字段为空时脚本不会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:40:07