Configuration 如何在Groovy上迭代所有配置项?
我有一个groovy scipt,它在我的应用程序中扮演配置角色。其结构如下所示:Configuration 如何在Groovy上迭代所有配置项?,configuration,groovy,Configuration,Groovy,我有一个groovy scipt,它在我的应用程序中扮演配置角色。其结构如下所示: a{ b=val1 c{ d=val2 } } e{ f=val3 } 如何在此配置中迭代enties以将一个根的设置与另一个根的设置分开?我指的是这样一种迭代方式,我将能够确定根位置,比如: a (root) b c (subroot) d e (root) f 配置级别不受2级限制,所以使用简单的内部“for”循环进行迭代是不合适
a{
b=val1
c{
d=val2
}
}
e{
f=val3
}
如何在此配置中迭代enties以将一个根的设置与另一个根的设置分开?我指的是这样一种迭代方式,我将能够确定根位置,比如:
a (root)
b
c (subroot)
d
e (root)
f
配置级别不受2级限制,所以使用简单的内部“for”循环进行迭代是不合适的,因为我不知道编译时会有多少级。你是说这样
给定一个配置:
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配置:
walk( new ConfigSlurper().parse( cfg ) )
这张照片是:
a (root)
b
c (subroot)
d
e (root)
f
您还可以将配置文件保存在一个文件中(在本例中,config.groovy
)
然后,您可以将walk
调用更改为:
walk( new ConfigSlurper().parse( Config ) )
它将输出相同的I意思是这是文件中的配置内容,所以在ConfigSlupper之后,在这两种情况下(从文件和从字符串)将是相同的对象?如果是这样的话,这似乎是我所需要的。@sphinks在底部添加了一点,解释了当配置在单独的脚本中时的一种方法