如何使用字符串插值从 Groovy 中带有点符号的嵌套映射的 属性 中获取值
How to get a value from a property of a nested map with dot notation in Groovy using string interpolation
我从参数中收到一个以点表示的字符串,例如"attr1.attr2.attr3"
。
我有一个数据类型为 LinkedHashMap<String, Object> mapObject
的对象。
它有一个可以通过这种方式访问的值:mapObject.attr1.attr2.attr3
.
当我尝试以这种方式访问该字段时:mapObject."${attr1.attr2.attr3}
,我收到一个 MissingPropertyException
,因为 groovy 将其转换为字符串:mapObject."attr1.attr2.attr3"
并且属性,显然,不存在。
我已经设法使用 Eval.java class Eval.x()
方法解决了这个问题: Eval.x(mapObject,"x.${attr1.attr2.attr3}")
,但这对蜗牛来说也太慢了。
有没有一种方法可以让我只知道点标记路径就可以获取地图的嵌套 属性 的值?
这是我的代码:
def superCoolMethod(String dotNotatedPath, LinkedHashMap<String, Object> MapObject){
def valueINeedToGetFromTheMapObject = MapObject."${dotNotatedPath}"
// Other stuff unimportant for this question.
您可以在 .
上拆分路径(为正则表达式引用它)然后减少
在使用您的数据的路径上。例如
def data = [a: [b: [c: 42]]]
def path = "a.b.c"
println path.split(/\./).inject(data){ m, p -> m?.getAt(p) }
// → 42
我从参数中收到一个以点表示的字符串,例如"attr1.attr2.attr3"
。
我有一个数据类型为 LinkedHashMap<String, Object> mapObject
的对象。
它有一个可以通过这种方式访问的值:mapObject.attr1.attr2.attr3
.
当我尝试以这种方式访问该字段时:mapObject."${attr1.attr2.attr3}
,我收到一个 MissingPropertyException
,因为 groovy 将其转换为字符串:mapObject."attr1.attr2.attr3"
并且属性,显然,不存在。
我已经设法使用 Eval.java class Eval.x()
方法解决了这个问题: Eval.x(mapObject,"x.${attr1.attr2.attr3}")
,但这对蜗牛来说也太慢了。
有没有一种方法可以让我只知道点标记路径就可以获取地图的嵌套 属性 的值?
这是我的代码:
def superCoolMethod(String dotNotatedPath, LinkedHashMap<String, Object> MapObject){
def valueINeedToGetFromTheMapObject = MapObject."${dotNotatedPath}"
// Other stuff unimportant for this question.
您可以在 .
上拆分路径(为正则表达式引用它)然后减少
在使用您的数据的路径上。例如
def data = [a: [b: [c: 42]]]
def path = "a.b.c"
println path.split(/\./).inject(data){ m, p -> m?.getAt(p) }
// → 42