используя Eval в Groovy - PullRequest
       16

используя Eval в Groovy

1 голос
/ 30 сентября 2010

Как я могу использовать eval в groovy для оценки следующей строки:

{key1 = keyval, key2 = [listitem1, listitem2], key3 = keyval2}

Все элементы списка иkeyval - это строка.

при выполнении Eval.me ("{key1 = keyval, key2 = [listitem1, listitem2], key3 = keyval2}") выдает мне следующую ошибку:

Неоднозначновыражение может быть выражением закрытия без параметров или изолированным блоком открытого кода;решение: Добавить явный список параметров замыкания, например, {it -> ...}, или заставить его обрабатываться как открытый блок, присваивая ему метку, например, L: {...} в

Я хочу получить HashMap

Ответы [ 2 ]

4 голосов
/ 30 сентября 2010

Нет ли способа получить данные в формате JSON?Тогда вы можете использовать один из парсеров , упомянутых здесь .

1 голос
/ 30 сентября 2010

Вы можете проанализировать эту строку, переведя некоторые символы и написав собственную привязку для возврата имен переменных, когда Groovy пытается их найти, например:

class Evaluator extends Binding {
  def parse( s ) {
    GroovyShell shell = new GroovyShell( this );
    shell.evaluate( s )
  }
  Object getVariable( String name ) { name }
}

def inStr = '{key1=keyval, key2=[listitem1, listitem2], key3=keyval2}'
def inObj = new Evaluator().parse( inStr.tr( '{}=', '[]:' ) )

println inObj

Но это очень хрупкое решение, и получение данных в более дружественном формате (, как предлагает @ Stefan ), безусловно, лучший путь..

...