我正在使用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?
答案 0 :(得分:5)
我不知道GSON,但它是一个Java库,所以我没有看到它理解Scala类型的原因。
我猜你可以将你的JSON反序列化为Java地图,并使用scala.collections.JavaConverters
或scala.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