需要反序列化复杂 Map[String, AnyRef] 对象的 .toString 表示形式



由于我的代码中的一个错误,我最终使用.toString序列化复杂的Map[String, AnyRef]对象,而我实际上打算的是 JSON 序列化。现在我有字符串表示任意嵌套级别的映射。

我的目标是将这些表示转换为JSON,而不会丢失任何信息或丢失尽可能少的信息。

我应该遵循什么方法来完成此操作?

这实际上取决于您在这些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)"

你如何确定你有res2res3的案例?一般来说,如果您用作键的这些String中的任何一个包含,您将遇到一些问题,因为存在歧义或语法错误(如果您尝试解析内容(。

但是,如果您没有这些,则可以:

  • 使用.substring删除初始Map(和最终)* 使用","作为分隔符.split结果
  • .map结果从值.split键,trim双方
  • 那么唯一的问题是解析值(AnyRef不是很具体(。

或者:

  • 打开崇高文本(或任何其他支持多行版本的编辑器(
  • 将您的代码粘贴到那里
  • 选择->并将其用于整个文件中的多行选择
  • 使用 Ctrl+箭头在键周围添加"以使其可解析String
  • 如果需要,使用相同的方法来调整AnyRef
  • 将代码复制回 Scala 并评估

最新更新