2010-09-29 8 views
1

Comment puis-je utiliser eval Groovy pour évaluer la chaîne suivante:en utilisant eval dans groovy

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

Tous les éléments de la liste et keyval est une chaîne.

faire Eval.me ("{key1 = keyval, key2 = [listitem1, listitem2], key3 = keyval2}") me donne l'erreur suivante:

expression Ambigu pourrait être soit une expression de fermeture parameterless ou un bloc de code ouvert isolé; solution: Ajouter une liste de paramètres de fermeture explicite, par ex. {it -> ...} ou forcez-le à être traité comme un bloc ouvert en lui attribuant une étiquette, par ex. L: {...} à

Je veux HashMap

Répondre

1

Vous peut analyser cette chaîne en traduisant quelques-uns des personnages et l'écriture de votre propre liaison pour retourner les noms de variables quand Groovy essaie de les regarder, comme si:

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 

Mais ceci est un très solution fragile, et obtenir les données dans un format plus convivial (as suggested by @Stefan) est certainement la meilleure façon de faire ...

4

Yat-il aucun moyen que vous pouvez obtenir les données au format JSON? Ensuite, vous pouvez simplement utiliser l'un des analyseurs mentioned here.

Questions connexes