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

如何将冒号分隔的文本文件数据加载到Groovy Map中?

解决Groovy加载冒号分隔键值对到Map的问题

需求说明

将myfile.txt中冒号分隔的键值对数据加载到Groovy的Map中,通过拆分键值对并迭代填充实现目标。

myfile.txt内容

name:john
name2:peter
name3:albert

期望结果

[name: 'john', name2: 'peter', name3: 'albert']

原代码问题

原代码存在核心语法错误:给Map赋值时误用冒号:,正确赋值应使用等号=;同时未考虑值中可能包含冒号的情况,拆分逻辑不够严谨。

原代码:

def readFile = sh(returnStdout: true, script: "cat myfile.txt").trim()
 def map = [:]
    readFile.eachLine {line ->
       def(key,value) = line.split(':')
           map[key.trim()] : value.toString()
               }
        println map

修正后的代码

普通Groovy脚本场景

本地运行的Groovy脚本可直接读取文件:

def fileContent = new File('myfile.txt').text.trim()
def map = [:]

fileContent.eachLine { line ->
    // 限制拆分1次,避免值中含冒号时被错误拆分
    def parts = line.split(':', 2)
    if (parts.size() == 2) {
        def key = parts[0].trim()
        def value = parts[1].trim()
        map[key] = value
    }
}

println map

Jenkins Pipeline场景

在Jenkins Pipeline中执行时,保留sh命令读取文件:

def readFile = sh(returnStdout: true, script: "cat myfile.txt").trim()
def map = [:]

readFile.eachLine { line ->
    def parts = line.split(':', 2)
    if (parts.size() == 2) {
        def key = parts[0].trim()
        def value = parts[1].trim()
        map[key] = value.toString()
    }
}

println map

修正要点

  1. 将Map赋值语句的map[key.trim()] : value.toString()改为map[key] = value,修正语法错误
  2. 使用split(':', 2)限制拆分次数,确保值中包含冒号时不会被拆分
  3. 增加parts.size() == 2的判断,避免无效行导致数组越界
  4. 对键和值执行trim(),去除可能存在的首尾空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:40:15