Необходимо десериализовать представление .toString сложного объекта Map [String, AnyRef]. - PullRequest
0 голосов
/ 15 января 2020

Из-за ошибки в моем коде я закончил сериализацию сложных Map[String, AnyRef] объектов, используя .toString, тогда как на самом деле я хотел сериализовать JSON. Теперь у меня есть строки, представляющие карты произвольных уровней вложенности.

Моя цель - преобразовать эти представления в JSON без потери какой-либо информации или потери наименьшего возможного количества информации.

Что подход, которому я должен следовать, чтобы выполнить sh это?

1 Ответ

3 голосов
/ 15 января 2020

Это действительно зависит от того, что у вас есть в этих String с. Проблема в том, что .toString сам по себе теряет некоторую информацию:

@ Map("test" -> 1).toString
res1: String = "Map(test -> 1)"

@ Map("debug -> 2, test" -> 1).toString
res2: String = "Map(debug -> 2, test -> 1)"

@ Map("debug" -> 2, "test" -> 1).toString
res3: String = "Map(debug -> 2, test -> 1)"

Как бы вы выяснили, если у вас есть дело из res2 или res3? В общем, если какой-либо из этих String s, которые вы использовали в качестве ключей, содержит ,, у вас будет некоторый проблемный случай c, так как возникнут двусмысленности или синтаксические ошибки (если вы попытаетесь разобрать вещи).

Однако, если у вас их нет, вы можете:

  • удалить начальный Map( и окончательный ), используя .substring *.split результат, используя "," "в качестве разделитель
  • .map thw результат для .split ключ от значения, trim обе стороны
  • , тогда единственной проблемой будет синтаксический анализ значений (AnyRef не очень точно c).

В качестве альтернативы:

  • открыть Sublime Text (или любой другой редактор с поддержкой многострочного издания )
  • вставить свой код там
  • выберите -> и используйте его для многострочного выделения во всем файле
  • используйте стрелки Ctrl + для добавления " вокруг ключа, чтобы сделать его доступным String
  • используйте тот же метод для настройки AnyRef с при необходимости
  • скопируйте код обратно в Scala и оцените
...