2013-03-09 20 views
3

我正在使用最新版本的GSON Scala 2.10。我想將一個JSON字符串反序列化爲一個scala.collection.mutable.HashMap。但map的值爲空,只有HashMapserialVersionUID,沒有更多的字段。GSON與Scala:Scala scala.collection.mutable.HashMap與java.util.HashMap

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?

回答

4

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