J'essaie de conserver une carte groovy dans un fichier. Ma tentative actuelle est d'écrire la représentation sous forme de chaîne, puis de la relire et d'appeler evaluate
dessus pour recréer la carte lorsque je suis prêt à l'utiliser à nouveau.
Le problème que j'ai, c'est que la méthode toString()
de la carte supprime les citations vitales des valeurs des éléments. Lorsque mes appels de code sont évalués, il se plaint d'un identifiant inconnu.
Ce code illustre le problème:
m = [a: 123, b: 'test']
print "orig: $m\n"
s = m.toString()
print " str: $s\n"
m2 = evaluate(s)
print " new: ${m2}\n"
Les deux premières instructions print fonctionnent presque - mais les guillemets autour de la valeur de la clé b
ont disparu. Au lieu d'afficher [a: 123, b: 'test']
, ça montre [a: 123, b: test]
.
À ce stade, le dommage est fait. L'appel evaluate
s'étouffe lorsqu'il essaie d'évaluer test
en tant qu'identifiant et non en tant que chaîne.
Donc, mes questions spécifiques:
Groovy fournit la méthode inspect()
renvoie un objet sous forme de chaîne analysable:
// serialize
def m = [a: 123, b: 'test']
def str = m.inspect()
// deserialize
m = Eval.me(str)
Une autre façon de sérialiser une carte groovy en tant que chaîne lisible est avec JSON:
// serialize
import groovy.json.JsonBuilder
def m = [a: 123, b: 'test']
def builder = new JsonBuilder()
builder(m)
println builder.toString()
// deserialize
import groovy.json.JsonSlurper
def slurper = new JsonSlurper()
m = slurper.parseText('{"a": 123, "b": "test"}')
Vous pouvez utiliser myMap.toMapString()