【问题标题】:How to get a value from a property of a nested map with dot notation in Groovy using string interpolation如何使用字符串插值在 Groovy 中使用点表示法从嵌套映射的属性中获取值
【发布时间】:2021-03-19 23:26:33
【问题描述】:

我从参数中收到一个点表示的字符串,例如"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.

【问题讨论】:

    标签: java string groovy hashmap string-interpolation


    【解决方案1】:

    您可以在. 上拆分路径(引用它作为正则表达式),然后减少 在使用您的数据的路径上。例如

    def data = [a: [b: [c: 42]]]
    def path = "a.b.c"
    
    println path.split(/\./).inject(data){ m, p -> m?.getAt(p) }
    // → 42
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-25
      • 2010-11-14
      • 1970-01-01
      • 2013-12-05
      • 2016-01-20
      • 2018-11-28
      • 2022-11-26
      相关资源
      最近更新 更多