Groovy ConfigSlurper Настройка массивов - PullRequest
3 голосов
/ 27 апреля 2011

Я пытаюсь создать конфигурацию, которая бы выглядела примерно так:

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]

Что я делаю не так?

Спасибо!

Ответы [ 3 ]

16 голосов
/ 27 апреля 2011

Кажется, я решил это так:

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

Надеюсь, это поможет кому-то еще !!

0 голосов
/ 03 декабря 2013

Я попытался разобрать с ConfigSlurper что-то вроде этого:

config {sha=[{from = 123;to = 234},{from = 234;to = 567}]}

Массив "ша" был далек от ожидаемого. Чтобы получить "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)
}
0 голосов
/ 25 апреля 2012

Вы должны быть осторожны при использовании ConfigSlurper при выполнении подобных действий.
Например, ваше решение фактически выдаст следующий результат:

true
[:]

Если вы посмотрите внимательно, вы заметите, что во втором массиве есть опечатка flase вместо false

Следующее:

def configObj = new ConfigSlurper().parse("config { nods=[[test:true],[test:false]] }")
configObj.config.nods.each { println it.test }

должен дать правильный результат:

true
false
...