Dou*_*ris 25 groovy serialization deserialization
我正在尝试将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"
Run Code Online (Sandbox Code Playgroud)
前两个打印语句几乎可以工作 - 但是关键值的引用b已经消失了.[a: 123, b: 'test']它表明,而不是显示[a: 123, b: test].
此时损坏已经完成.当evaluate调用尝试评估test为标识符而不是字符串时,调用会阻塞.
所以,我的具体问题:
ata*_*lor 58
Groovy提供的inspect()方法将对象作为可解析的字符串返回:
// serialize
def m = [a: 123, b: 'test']
def str = m.inspect()
// deserialize
m = Eval.me(str)
Run Code Online (Sandbox Code Playgroud)
将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"}')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26361 次 |
| 最近记录: |