Groovy中通过变量调用Map属性值失败问题求助
Groovy动态访问Map属性值问题
初始可行代码
我写了一段Groovy脚本,能正常从JSON解析后的Map中获取指定键的值:
result = new JsonSlurper().parse(<URL object>.newReader()) echo $result.propertykey1
说明:result是包含多组键值对的Map,其中包含
propertykey1:propertyvalue1
输出结果:成功打印出预期值propertyvalue1。
需求与尝试的代码
我希望编写一个方法,接收不同的属性键作为输入参数(参数名:propertykeyparam),动态获取对应的值。尝试的代码如下:
get_propertyvalue(propertykey1) ... def get_propertyvalue(propertykeyparam) { result = new JsonSlurper().parse(<URL object>.newReader()) echo $result.propertykeyNameparam echo "result.$propertykeyNameparam" echo $result.$propertykeyNameparam }
问题现象
echo $result.propertykeyNameparam—— 打印nullecho "result.$propertykeyNameparam"—— 打印result.branchecho $result.$propertykeyNameparam—— 打印整个result Map的内容加上.propertykeyNameparam
预期输出:propertyvalue1
解决方案
问题原因
- 变量名不匹配:方法参数定义的是
propertykeyparam,但方法内部错误使用了propertykeyNameparam,导致参数值未被正确引用。 - Map动态取值方式错误:使用
.语法时,result.propertykeyNameparam会直接查找名为propertykeyNameparam的键,而不是将变量值作为键去查找。
修正后的代码
get_propertyvalue(propertykey1) ... def get_propertyvalue(propertykeyparam) { result = new JsonSlurper().parse(<URL object>.newReader()) // 正确的动态取值方式:使用Map的方括号语法 echo result[propertykeyparam] }
补充说明
Groovy中Map的动态键访问有两种常用方式:
- 当键是固定字符串时,使用
.语法:result.propertykey1 - 当键是变量或动态生成的字符串时,使用方括号语法:
result[dynamicKeyVariable]
这样就能正确根据传入的参数值,从Map中获取对应的属性值,输出预期的propertyvalue1。
内容的提问来源于stack exchange,提问作者Vijay Kumar R
相关产品推荐
相关产品推荐

