template salto linea invertidas invertida concatenar comillas comilla codigo serialization groovy deserialization

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:

  1. ¿Hay una mejor manera de serializar / des-serializar mapas en Groovy?
  2. ¿Hay una manera de producir una representación de cadena de un mapa con las comillas correctas?

Puedes usar myMap.toMapString()