【问题标题】:GSON with Scala: Scala scala.collection.mutable.HashMap vs. java.util.HashMapGSON 与 Scala:Scala scala.collection.mutable.HashMap 与 java.util.HashMap
【发布时间】:2013-03-09 14:30:57
【问题描述】:

我正在使用带有最新版本 GSON 的 Scala 2.10。我想将 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?

【问题讨论】:

    标签: json scala gson


    【解决方案1】:

    我不知道 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
    

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      相关资源
      最近更新 更多