groovy中通过字符串访问多维数组

groovy中通过字符串访问多维数组,groovy,Groovy,我想通过data['dimension1']['dimension2']之类的字符串访问JSON HasMap,但我想像data[myAccessor]那样动态地访问它 代码 是的,你不能只是像那样执行复杂的文本代码是的,你不能像那样执行复杂的文本代码你可以利用Groovy,用它来表示访问器,让它更接近你的意图: import groovy.json.JsonSlurperClassic dataContent = ''' { "Test": { "Info": "Hello"

我想通过
data['dimension1']['dimension2']
之类的字符串访问JSON HasMap,但我想像
data[myAccessor]
那样动态地访问它

代码
是的,你不能只是像那样执行复杂的文本代码是的,你不能像那样执行复杂的文本代码你可以利用Groovy,用它来表示访问器,让它更接近你的意图:

import groovy.json.JsonSlurperClassic

dataContent = '''
{
  "Test": {
    "Info": "Hello"
  }
}
'''

def jsonSlurper = new JsonSlurperClassic()
data = jsonSlurper.parseText(dataContent)

println data.'Test'.'Info' // prints 'Hello'
accessor = "'Test'.'Info'"

Eval.x(data, "println x.${accessor}") // prints 'Hello'
您可以利用Groovy并用表示访问器,使其更接近您的意图:

import groovy.json.JsonSlurperClassic

dataContent = '''
{
  "Test": {
    "Info": "Hello"
  }
}
'''

def jsonSlurper = new JsonSlurperClassic()
data = jsonSlurper.parseText(dataContent)

println data.'Test'.'Info' // prints 'Hello'
accessor = "'Test'.'Info'"

Eval.x(data, "println x.${accessor}") // prints 'Hello'

非常感谢你,蒂姆!我还可以使用此技术将
Hello
值更改为其他值吗?@dirkscollinger是。您可以沿路径减少最后一个元素(例如,使用
.dropRight(1)
),然后将最后一个元素的值放在生成的地图上(如果有),非常感谢!我还可以使用此技术将
Hello
值更改为其他值吗?@dirkscollinger是。您可以沿除最后一个元素之外的路径进行缩减(例如,使用
.dropRight(1)
),然后将最后一个元素的值放在生成的地图上(如果有),谢谢Jalopaba!关于eval的一个注意事项是要警惕用户的输入。有人发送“X;System.exit(1)”可能会停止JVM谢谢Jalopaba!关于eval的一个注意事项是要警惕用户的输入。有人发送
“X;System.exit(1)”
可能会停止jvm