我正在使用Play Framework 2.0,它使用Jerkson來解析JSON字符串。我用它成功地解析字符串的不可變列表,像這樣:如何解析scala中的mutableList作爲播放框架2.0上的JSON?
Json.parse(jsonStr).as[ List[String] ]
但是當我嘗試
Json.parse(jsonStr).as[ MutableList[String] ]
有誰知道我可以很容易地做到這一點這個代碼不爲我工作?
我正在使用Play Framework 2.0,它使用Jerkson來解析JSON字符串。我用它成功地解析字符串的不可變列表,像這樣:如何解析scala中的mutableList作爲播放框架2.0上的JSON?
Json.parse(jsonStr).as[ List[String] ]
但是當我嘗試
Json.parse(jsonStr).as[ MutableList[String] ]
有誰知道我可以很容易地做到這一點這個代碼不爲我工作?
你的第二個行會工作,因爲它是在玩2.0的未來版本中,通過traversableReads
in the current trunk由於更換seqReads
:
implicit def traversableReads[F[_], A](implicit bf: generic.CanBuildFrom[F[_], A, F[A]], ra: Reads[A]) = new Reads[F[A]] {
def reads(json: JsValue) = json match {
case JsArray(ts) => {
val builder = bf()
for (a <- ts.map(fromJson[A](_))) {
builder += a
}
builder.result()
}
case _ => throw new RuntimeException("Collection expected")
}
}
所以,如果你願意to build Play from source,或等待,很好。否則,您應該能夠將方法放在您自己代碼中的某處以獲取合適的Reads
實例,或者甚至更好 - 僅使用Alexey Romanov的解決方案,或者最好 - 不要使用MutableList
。
對不起,但我應該把這個方法放在我的代碼中? – wynnch
這是一個隱式方法,它爲集合類型創建'Reads' [type class](http://stackoverflow.com/questions/5408861/what-are-type-classes-in-scala-useful-for)的實例根據需要,所以您應該可以將它放在範圍內的任何位置(您可能需要添加一個導入 - 或將調用限定爲-json.fromJson)。 –
類'MutableList'來自? – missingfaktor
@missingfaktor我認爲他指的是[scala.collection.mutable.MutableList](http://www.scala-lang.org/api/current/scala/collection/mutable/MutableList.html) –
@DanSimon,謝謝。三年的斯卡拉,這是我第一次看到那堂課。 – missingfaktor