не удается заставить Groovy ConfigSlurper проанализировать строку и найти результат как свойство

#parsing #groovy #configuration-files

#синтаксический анализ #groovy #конфигурационные файлы

Вопрос:

У меня действительно простая проблема с получением ConfigSlurper для обработки моей конфигурации

Groovy версия 2.5.6

Вернулся к основам и попробовал этот простой скрипт Groovy:

 ConfigSlurper slurper = new ConfigSlurper ()    
slurper.parse ("""host='localhost' """)

println slurper.getProperty('host')

/* gives exception :
Caught: groovy.lang.MissingPropertyException: No such property: host for class: groovy.util.ConfigSlurper
groovy.lang.MissingPropertyException: No such property: host for class: groovy.util.ConfigSlurper
    at scripts.testSSlurper.run(testSSlurper.groovy:7)
 */
  

Почему этот простой синтаксический анализ не завершается ошибкой?

Что я здесь делаю не так? Это блокирующее средство для реального кода, который я написал для разбора файла, который также, похоже, ничего не привязывает к slurper.

Ответ №1:

В вашем примере кода есть одно недоразумение. Синтаксический анализ конфигурационного скрипта не изменяет ConfigSlurper объект, но вместо этого возвращает ConfigObject . Все, что вам нужно сделать, это записать результат slurper.parse(script) метода и получить доступ к host ключу из возвращаемого ConfigObject экземпляра.

 ConfigSlurper slurper = new ConfigSlurper()

def config = slurper.parse(""" host = 'localhost' """)

println config.getProperty("host")
  

Вывод:

 localhost
  

Комментарии:

1. Как мне работать с переменными… что означает, если у меня есть {host = «localhost»} в переменной, скажем, «str» ?! и localhost находится в «двойных кавычках».. И как нам получить доступ к вложенным элементам, таким как { users { username = «Пользователь»}}

2. Отвечая на мой собственный комментарий: 1-й Замените «» на ‘ ‘, используя .replaceAll( «»», «‘» ) а затем получить доступ к подобному config.porperty.subProperty.subProperty …