GSON与Scala: Scala scala.collection.mutable.HashMap与java.util.HashMap的区别

3
我正在使用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,它可以工作。我有一个带有条目的map。但为什么Scala HashMap不能工作?
1个回答

6

我不了解GSON,但它是一个Java库,所以我不认为它能理解Scala类型。

我想你可以将JSON反序列化为Java map,并使用scala.collections.JavaConvertersscala.collection.JavaConversions提供的转换将其包装成Scala map。例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接