代码之家  ›  专栏  ›  技术社区  ›  Tim

带有Scala的GSON:Scala Scala.collection.mutable.HashMap与java.util.HashMap

  •  3
  • Tim  · 技术社区  · 13 年前

    我使用的是Scala 2.10和GSON的最新版本。我想将JSON字符串反序列化为 scala.collection.mutable.HashMap 。但是 map 为空,只有 HashMap 用一个 serialVersionUID ,不再有字段。

    import com.google.gson.Gson
    import com.google.gson.reflect.TypeToken
    import scala.collection.mutable.HashMap
    
    object MyTest {
      def main(args: Array[String]) {
        val gson = new Gson
        val jsonString = "{\"test1\":\"value-test1\",\"test2\":\"value-test2\"}"
        val mapType = new TypeToken[HashMap[String, String]] {}.getType
        val map = gson.fromJson(jsonString, mapType).asInstanceOf[HashMap[String, String]]
      }
    }
    

    尝试使用 java.util.HashMap 而不是 scala.collection.mutable.HashMap(标量集合变量哈希映射) ,它有效。我有一个 地图 带有条目。但为什么它不能与Scala哈希映射一起使用呢?

    1 回复  |  直到 13 年前
        1
  •  6
  •   ghik    13 年前

    我不知道GSON,但它是一个Java库,所以我看不出它为什么能理解Scala类型。

    我想您可以将JSON反序列化为Java映射,并使用 scala.collections.JavaConverters 或 scala.collection.JavaConversions 。例如:

    import java.{util => ju}
    import scala.collection.JavaConverters._
    
    val gson = new Gson
    val jsonString = "{\"test1\":\"value-test1\",\"test2\":\"value-test2\"}"
    val mapType = new TypeToken[ju.HashMap[String, String]] {}.getType
    val map = gson.fromJson[ju.Map[String, String]](jsonString, mapType).asScala