3

我正在开发 Play Framework 2.0,它使用 Jerkson 来解析 JSON 字符串。我成功地使用它来解析字符串的不可变列表,如下所示:

Json.parse( jsonStr ).as[ List[String] ]

但是当我尝试时,这段代码对我不起作用

Json.parse( jsonStr ).as[ MutableList[String] ]

有谁知道我怎么能轻松做到这一点?

4

2 回答 2

3

由于在当前主干中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.

于 2012-06-18T19:20:27.710 回答
2

例如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

于 2012-06-18T19:13:01.410 回答