serialization - invertidas - javascript salto de linea codigo
Serialización del mapa maravilloso a la cadena con comillas (2)
Groovy proporciona el método inspect()
devuelve un objeto como una cadena analizable:
// serialize
def m = [a: 123, b: ''test'']
def str = m.inspect()
// deserialize
m = Eval.me(str)
Otra forma de serializar un mapa maravilloso como una cadena legible es 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"}'')
Estoy tratando de persistir un mapa maravilloso en un archivo. Mi intento actual es escribir la representación de la cadena y luego leerla nuevamente y llamar a evaluate
para recrear el mapa cuando esté listo para usarlo nuevamente.
El problema que tengo es que el método toString()
del mapa elimina las citas vitales de los valores de los elementos. Cuando mi código de llamadas evalúa, se queja de un identificador desconocido.
Este código demuestra el problema:
m = [a: 123, b: ''test'']
print "orig: $m/n"
s = m.toString()
print " str: $s/n"
m2 = evaluate(s)
print " new: ${m2}/n"
Las dos primeras declaraciones de impresión casi funcionan, pero las comillas en torno al valor de la clave b
se han ido. En lugar de mostrar [a: 123, b: ''test'']
, muestra [a: 123, b: test]
.
En este punto el daño está hecho. La llamada de evaluate
bloquea cuando intenta evaluar la test
como un identificador y no como una cadena.
Por lo tanto, mis preguntas específicas:
- ¿Hay una mejor manera de serializar / des-serializar mapas en Groovy?
- ¿Hay una manera de producir una representación de cadena de un mapa con las comillas correctas?
Puedes usar myMap.toMapString()