我正在开发 Play Framework 2.0,它使用 Jerkson 来解析 JSON 字符串。我成功地使用它来解析字符串的不可变列表,如下所示:
Json.parse( jsonStr ).as[ List[String] ]
但是当我尝试时,这段代码对我不起作用
Json.parse( jsonStr ).as[ MutableList[String] ]
有谁知道我怎么能轻松做到这一点?
我正在开发 Play Framework 2.0,它使用 Jerkson 来解析 JSON 字符串。我成功地使用它来解析字符串的不可变列表,如下所示:
Json.parse( jsonStr ).as[ List[String] ]
但是当我尝试时,这段代码对我不起作用
Json.parse( jsonStr ).as[ MutableList[String] ]
有谁知道我怎么能轻松做到这一点?
由于在当前主干中seqReads
替换了by ,您的第二行将在 Play 2.0 的未来版本中正常工作:traversableReads
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")
}
}
因此,如果您愿意从源代码构建 Play,或者等待,您就可以了。否则,您应该能够在您自己的代码中的某处删除上面的方法,以Reads
在范围内获得适当的实例,或者——甚至更好——只使用 Alexey Romanov 的解决方案,或者——最好不要使用MutableList
.
例如new MutableList[String]() ++= Json.parse( jsonStr ).as[ List[String] ]
(假设MutableList
你的意思@DanSimon 是正确的)。但 Scala 中最常用的可变列表类集合是 a Buffer
,它可以通过Buffer(Json.parse( jsonStr ).as[ List[String] ]
或获得Json.parse( jsonStr ).as[ List[String] ].toBuffer
。