3

私は Play Framework 2.0 に取り組んでおり、Jerkson を使用して JSON 文字列を解析しています。私はそれをうまく使って、文字列の不変リストを次のように解析していました:

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

しかし、試してみると、このコードはうまくいきません

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

これを簡単に行う方法を知っている人はいますか?

4

2 に答える 2

3

あなたの 2 行目は、現在の trunkseqReadsの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] ](@DanSimonが正しいと仮定してMutableList)。しかし、Scala で最もよく使用される変更可能なリストのようなコレクションは、またはBufferとして取得できるです。Buffer(Json.parse( jsonStr ).as[ List[String] ]Json.parse( jsonStr ).as[ List[String] ].toBuffer

于 2012-06-18T19:13:01.410 に答える