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

时间:2013-03-09 14:30:58

标签: json scala gson

我正在使用Scala 2.10和最新版本的GSON。我想将JSON字符串反序列化为scala.collection.mutable.HashMap。但map的值为空,只有HashMap的{​​{1}},不再有字段。

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 HashMap?

1 个答案:

答案 0 :(得分:5)

我不知道GSON,但它是一个Java库,所以我没有看到它理解Scala类型的原因。

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

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