当条目较少时将json转换为“ scala.collection.immutable.HashMap”时发生ClassCastException

时间:2019-08-01 13:45:39

标签: scala apache-spark json4s

我使用json4s将json转换为scala.collection.immutable.HashMap。但是它失败了 java.lang.ClassCastException: scala.collection.immutable.Map$Map3 cannot be cast to scala.collection.immutable.HashMap 当json中的条目少于五个时。它与五个或更多条目完美配合。

检查的json是正确的,应该不会出现。

implicit val formats = Serialization.formats(NoTypeHints)

read[scala.collection.immutable.HashMap[String, Config]](json).get(id)
case class Config(joinConfig: JoinConfig,
                         a: Option[Boolean],
                         b: Option[Boolean],
                         c: Option[Boolean]) {}

case class JoinConfig(d: Double,e: Double,f: Double) {}

这是Scala Map行为还是json4s问题?

1 个答案:

答案 0 :(得分:1)

这是Scala行为。 Map.apply(pair: T*)根据大小返回Map的特殊实例。具有3个元素的映射不需要哈希表,仅比较每个键会更有效。

正如Yuriy在他的评论中所说,您应该只使用Map特性,并将实现留给scala。