Сериализация 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()