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]直接将其解析为 a,因为它是数字列表,而不是字符串。您的匹配示例有效,因为您之后将 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 回答