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

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 —— 打印null
  • echo "result.$propertykeyNameparam" —— 打印result.branch
  • echo $result.$propertykeyNameparam —— 打印整个result Map的内容加上.propertykeyNameparam

预期输出:propertyvalue1

解决方案

问题原因

  1. 变量名不匹配:方法参数定义的是propertykeyparam,但方法内部错误使用了propertykeyNameparam,导致参数值未被正确引用。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:55:24