Сериализация groovy карты в строку с кавычками

Я пытаюсь сохранить карту 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"

Первые два оператора печати почти работают - но кавычки вокруг значения для ключа b исчезли. Вместо показа [a: 123, b: 'test'] он показывает [a: 123, b: test].

На этом этапе нанесен урон. Вызов evaluate дросселируется, когда он пытается оценить test как идентификатор, а не строку.

Итак, мои конкретные вопросы:

  • Есть ли лучший способ сериализации/де-сериализации карт в Groovy?
  • Есть ли способ создать строковое представление карты с соответствующими кавычками?

Ответы

Ответ 1

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"}')

Ответ 2

Вы можете использовать myMap.toMapString()