如何迭代Groovy上的所有配置条目?

时间:2013-10-02 12:28:09

标签: configuration groovy

我有一个groovy scipt在我的应用程序中扮演配置角色。它的结构将是这样的:

a{
     b=val1
     c{
          d=val2
     }
 }
e{
     f=val3
 }

如何迭代此配置中的enties以将一个root的设置与另一个root的设置分开?我的意思是这种迭代方式,我将能够确定根位置,如下所示:

 a (root)
 b
 c (subroot)
 d
 e (root)
 f

并且配置级别不受2级限制,因此使用简单的内部'for'循环进行迭代是不合适的,因为我不会在编译时有多少级别。

1 个答案:

答案 0 :(得分:2)

你的意思是这样吗?

给定配置:

def cfg = '''
a {
    b = 'val1'
    c {
        d = 'val2'
    }
}
e {
    f = 'val3'
}'''

您可以定义递归walk方法,如下所示:

def walk( map, root=true ) {
    map.each { key, value ->
        if( value instanceof Map ) {
            println "$key (${root?'root':'subroot'})"
            walk( value, false )
        }
        else {
            println "$key"
        }
    }
}

然后调用该函数,传入slurped config:

walk( new ConfigSlurper().parse( cfg ) )

打印:

a (root)
b
c (subroot)
d
e (root)
f

您也可以将配置放在文件中(在此示例中为Config.groovy

然后,您可以将walk调用更改为:

walk( new ConfigSlurper().parse( Config ) )

它将输出相同的