根据键名取值时Map returns null
Map returns null when getting value based on key name
当在 Jenkins 管道中 运行 时,我有一个关于从 Grovvy 中的 LinkedHashMap 获取值的非常奇怪的问题。
我有一张这样的地图:map = ['key1': 'param1']
现在我想获取key1的值,所以调用map.get('key1')
或map['key1']
。令人惊讶的是这两个 return null
.
当我尝试调用 map.keySet()
时,它 returns key1
。最有趣的是,当我按预期调用 map.get(map.keySet()[0])
时,它 return param1
。
那么直接map.get('key1')
怎么可能行不通呢?
更新:
经过一番调查,我发现 key1
不是字符串,而是 org.codehaus.groovy.runtime.GStringImpl
。有人知道为什么它被转换为这个 class 而不是 String 吗?
初始地图是这样创建的:
result = ["${key}": value]
以下代码确实有效。
map = ['key1': 'param1']
assert 'param1' == map['key1']
问题更新后
密钥实际上不是字符串。 toString()
会给你字符串 String
,可以用作键
GStrings (groovy.lang.GString) 在其他编程语言中也称为插值字符串。 "${key}"
是一个 GString,但 "${key}".toString()
是一个字符串。更多详情请见 here
以下方法可以解决您的问题
def key = 'key1'
def a = "${key}" // or a = "${key}".toString()
def result = [:]
result[a] = 'param1'
println result.key1 // or result['key1']
当在 Jenkins 管道中 运行 时,我有一个关于从 Grovvy 中的 LinkedHashMap 获取值的非常奇怪的问题。
我有一张这样的地图:map = ['key1': 'param1']
现在我想获取key1的值,所以调用map.get('key1')
或map['key1']
。令人惊讶的是这两个 return null
.
当我尝试调用 map.keySet()
时,它 returns key1
。最有趣的是,当我按预期调用 map.get(map.keySet()[0])
时,它 return param1
。
那么直接map.get('key1')
怎么可能行不通呢?
更新:
经过一番调查,我发现 key1
不是字符串,而是 org.codehaus.groovy.runtime.GStringImpl
。有人知道为什么它被转换为这个 class 而不是 String 吗?
初始地图是这样创建的:
result = ["${key}": value]
以下代码确实有效。
map = ['key1': 'param1']
assert 'param1' == map['key1']
问题更新后
密钥实际上不是字符串。 toString()
会给你字符串 String
,可以用作键
GStrings (groovy.lang.GString) 在其他编程语言中也称为插值字符串。 "${key}"
是一个 GString,但 "${key}".toString()
是一个字符串。更多详情请见 here
以下方法可以解决您的问题
def key = 'key1'
def a = "${key}" // or a = "${key}".toString()
def result = [:]
result[a] = 'param1'
println result.key1 // or result['key1']