3

我正在使用带有最新版本 GSON 的 Scala 2.10。我想将 JSON 字符串反序列化为scala.collection.mutable.HashMap. 但是 的值为map空,只有 aHashMap和 a 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]]
  }
}

尝试使用 ajava.util.HashMap而不是scala.collection.mutable.HashMap,它可以工作。我有一个map条目。但为什么它不适用于 Scala HashMap?

4

1 回答 1

6

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

我想您可以将 JSON 反序列化为 Java 映射,并使用scala.collections.JavaConvertersor提供的转换将其包装到 Scala 映射中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
于 2013-03-09T15:00:07.643 回答