2010-09-29 22 views
1

我如何可以使用常規的eval評估以下字符串:使用eval在常規

{鍵= KEYVAL,鍵2 = [listitem1,listitem2],KEY3 = keyval2}

的列表項和keyval是一個字符串。

做Eval.me( 「{鍵1 = KEYVAL,鍵2 = [listitem1,listitem2],KEY3 = keyval2}」)是給我以下錯誤:

歧義表達可以是一個無參數的閉合表達或一個獨立的開放代碼塊; 解決方案:添加一個顯式的閉包參數列表,例如{it - > ...},或者通過給它一個標籤來強制它被當作一個開放塊。 L:{...}在

我想要得到的HashMap

回答

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)絕對是最好的方式去...

4

有沒有辦法,你可以得到JSON格式的數據?然後你可以使用其中一個解析器mentioned here