如何在groovy中使用eval来评估以下字符串:
{key1 = keyval,key2 = [listitem1,listitem2],key3 = keyval2}
所有列表项和keyval都是一个字符串。
执行Eval.me(“{key1 = keyval,key2 = [listitem1,listitem2],key3 = keyval2}”)给出了以下错误:
不明确的表达式可以是无参数闭包表达式,也可以是孤立的开放代码块; 解决方案:添加显式闭包参数列表,例如{it - > ...},或通过给它一个标签强迫它被视为一个开放的块,例如L:{...}在
我想获得HashMap
答案 0 :(得分:4)
您无法以JSON格式获取数据吗?然后你可以使用其中一个解析器mentioned here。
答案 1 :(得分:1)
你可以通过翻译某些字符来解析该字符串,并在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
但这是一个 非常 脆弱的解决方案,以更友好的格式(as suggested by @Stefan)获取数据绝对是最好的方式......