0

json を他の型に変換するのは簡単です。プレイから!ドキュメンテーション:

var str = "{\"next_cursor\":0,\"ids\":[123123,345345],\"previous_cursor\":0}"
var fol = Json.parse(str)
var fin = Json.fromJson[List[String]].fromJson(fol)

問題なく動作するはずです。正常にコンパイルされますが、次のエラーで失敗しました:

[RuntimeException: List expected]

代わりに、これは機能します:

var str = "{\"next_cursor\":0,\"ids\":[123123,345345],\"previous_cursor\":0}"
var fol = Json.parse(str)
var fin = (fol \ "ids") match {
    case ids: JsArray => ids.value.map(_.toString)
    case _ => JsArray()
}

なんで?API に何か問題があることを理解していますか? PlayFramework 2.0.1 でこれを試しています。

4

1 に答える 1

1

List[String]これは文字列ではなく数値のリストであるため、直接解析することはできません。後でIDを文字列にマップするため、一致の例が機能します。あなたの例を使用すると、次のように記述できます。

val str = "{\"next_cursor\":0,\"ids\":[123123,345345],\"previous_cursor\":0}"
val fol = Json.parse(str)
val fin = Json.fromJson[List[Int]](fol \ "ids")

構文を少し読みやすくするためにJsValue.as[T]、 を使用します。これは と同等ですJson.fromJson[T]

val fin = (fol \ "ids").as[List[Int]]

ID を文字列に変換する必要がある場合は、次のようにします。

val fin = (fol \ "ids").as[List[Int]].map(_.toString)
于 2012-06-26T07:01:13.863 に答える