我正在尝试将groovy地图保存到文件中。我目前的尝试是将字符串表示写出来然后再读回来并在其上调用evaluate
以便在我准备再次使用它时重新创建地图。
我遇到的问题是地图的toString()
方法会从元素的值中删除重要的引号。当我的代码调用evaluate时,它会抱怨一个未知的标识符。
此代码演示了此问题:
m = [a: 123, b: 'test']
print "orig: $m\n"
s = m.toString()
print " str: $s\n"
m2 = evaluate(s)
print " new: ${m2}\n"
前两个印刷语句几乎可以正常工作 - 但是密钥b
的值附近的引号已经消失。它不显示[a: 123, b: 'test']
,而是显示[a: 123, b: test]
。
此时损坏已经完成。 evaluate
调用在尝试将test
评估为标识符而非字符串时会阻塞。
所以,我的具体问题:
答案 0 :(得分:49)
Groovy提供inspect()
方法将对象作为可解析字符串返回:
// serialize
def m = [a: 123, b: 'test']
def str = m.inspect()
// deserialize
m = Eval.me(str)
将groovy地图序列化为可读字符串的另一种方法是使用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"}')
答案 1 :(得分:4)
您可以使用myMap.toMapString()