我正在尝试创建一个看起来像这样的配置:
nods = [
nod {
test = 1
},
nod {
test = 2
}
]
然后使用configSlurper读取它,但读取后“节点”对象似乎为空。
这是我的代码:
final ConfigObject data = new ConfigSlurper().parse(new File("config.dat").toURI().toURL())
println data.nods
和输出:
[null, null]
我做错了什么?
谢谢!
答案 0 :(得分:16)
它认为我这样解决了:
config {
nods = [
['name':'nod1', 'test':true],
['name':'nod2', 'test':flase]
]
}
然后使用它:
config = new ConfigSlurper().parse(new File("config.groovy").text)
for( i in 0..config.config.nods.size()-1)
println config.config.nods[i].test
希望这有助于其他人!!
答案 1 :(得分:0)
在执行此类操作时,使用ConfigSlurper时必须小心 例如,您的解决方案实际上会产生以下输出:
true
[:]
如果仔细观察,您会注意到第二个数组值 flase 上有拼写错误,而不是 false
以下内容:
def configObj = new ConfigSlurper().parse("config { nods=[[test:true],[test:false]] }")
configObj.config.nods.each { println it.test }
应该产生正确的结果:
true
false
答案 2 :(得分:0)
我尝试用ConfigSlurper解析这样的事情:
config {sha=[{from = 123;to = 234},{from = 234;to = 567}]}
数组“sha”远非预期。 为了将“sha”作为ConfigObjects数组,我使用了一个帮助器:
class ClosureScript extends Script {
Closure closure
def run() {
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure.delegate = this
closure.call()
}
}
def item(closure) {
def eng = new ConfigSlurper()
def script = new ClosureScript(closure: closure)
eng.parse(script)
}
这样我得到一个ConfigObjects数组:
void testSha() {
def config = {sha=[item {from = 123;to = 234}, item {from = 234;to = 567}]}
def xx = item(config)
assertEquals(123, xx.sha[0].from)
}