30

Groovyマップをファイルに永続化しようとしています。私の現在の試みは、文字列表現を書き出してから読み戻し、evaluate再度使用する準備ができたらマップを再作成するように要求することです。

私が抱えている問題はtoString()、マップのメソッドが要素の値から重要な引用符を削除することです。私のコード呼び出しが評価されるとき、それは未知の識別子について文句を言います。

このコードは問題を示しています:

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

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

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

最初の2つのprintステートメントはほぼ機​​能しますが、キーの値を囲む引用符bはなくなりました。を表示する代わりに、を表示[a: 123, b: 'test']します[a: 123, b: test]

この時点でダメージが発生します。文字列ではなく識別子としてevaluate評価しようとすると、呼び出しがチョークします。test

だから、私の特定の質問:

  1. Groovyでマップをシリアル化/逆シリアル化するためのより良い方法はありますか?
  2. 適切な引用符を使用してマップの文字列表現を生成する方法はありますか?
4

2 に答える 2

68

Groovyはinspect()、オブジェクトを解析可能な文字列として返すメソッドを提供します。

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

// deserialize
m = Eval.me(str)

グルーヴィーなマップを読み取り可能な文字列としてシリアル化する別の方法は、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"}')
于 2013-01-10T22:05:13.533 に答える
5

使用できますmyMap.toMapString()

于 2013-10-23T19:31:51.873 に答える