2013-01-10 22 views
16

Sto provando a mantenere una mappa groovy in un file. Il mio attuale tentativo è quello di scrivere la rappresentazione della stringa e poi leggerla di nuovo e chiamare evaluate su di esso per ricreare la mappa quando sono pronto per usarlo di nuovo.Serializzare la mappa groovy con le virgolette con le virgolette

Il problema che sto avendo è che il metodo toString() della mappa rimuove le virgolette vitali dai valori degli elementi. Quando le mie chiamate di codice vengono valutate, si lamenta di un identificatore sconosciuto.

Questo codice viene illustrato il problema:

m = [a: 123, b: 'test'] 
print "orig: $m\n" 

s = m.toString() 
print " str: $s\n" 

m2 = evaluate(s) 
print " new: ${m2}\n" 

Le prime due istruzioni di stampa quasi di lavoro - ma le virgolette attorno al valore per la chiave b se ne sono andati. Invece di mostrare [a: 123, b: 'test'], mostra [a: 123, b: test].

A questo punto il danno è fatto. La chiamata evaluate indebita quando tenta di valutare test come identificatore e non una stringa.

Quindi, le mie domande specifiche:

  1. C'è un modo migliore per serializzare/de-serializzare mappe in Groovy?
  2. C'è un modo per produrre una rappresentazione di stringa di una mappa con le virgolette appropriate?

risposta

43

Groovy fornisce il metodo inspect() restituisce un oggetto come una stringa analizzabile:

// serialize 
def m = [a: 123, b: 'test'] 
def str = m.inspect() 

// deserialize 
m = Eval.me(str) 

Un altro modo per serializzare una mappa groove come una stringa leggibile è con 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"}') 
+3

aggiungere def per le persone che tagliano e incollano;) – orbfish

2

Puoi utilizzare myMap.toMapString()

+0

'myMap.toMapStri ng() 'lascerà cadere anche le virgolette ... – s0undt3ch

Problemi correlati