根据键名获取值时,地图返回null

时间:2019-02-28 12:27:16

标签: jenkins groovy key-value linkedhashmap

在Jenkins管道中运行时,关于从Grovvy中的LinkedHashMap获取值有一个非常奇怪的问题。

我有一张这样的地图:map = ['key1': 'param1']

现在,我想获取key1的值,所以我叫map.get('key1')map['key1']。令人惊讶的是,它们都返回null

当我尝试致电map.keySet()时,它将返回key1。最有趣的是,当我致电map.get(map.keySet()[0])时,它会按预期返回param1

那么直接map.get('key1')怎么可能不起作用?

更新:

经过一番调查,我发现key1不是字符串,而是org.codehaus.groovy.runtime.GStringImpl。有人知道为什么将其强制转换为此类而不是String吗?

这是创建初始地图的方式:

result = ["${key}": value]

2 个答案:

答案 0 :(得分:0)

以下代码确实有效。

map = ['key1': 'param1']
assert 'param1' == map['key1']

问题更新后

键实际上不是字符串。 toString()会以String的形式提供给您,可以用作密钥

答案 1 :(得分:0)

GStrings(groovy.lang.GString),在其他编程语言中也称为插值字符串。 "${key}"是GString,但是"${key}".toString()是String。详情请访问here

以下方法可以解决您的问题

def key = 'key1'
def a = "${key}"  // or a = "${key}".toString()
def result = [:]
result[a] = 'param1'
println result.key1 // or result['key1']