Play框架:如何将JSON转换为List [Int]

时间:2014-04-25 17:16:48

标签: json scala playframework

给出以下JSON字符串......

val jsonStr = "[1, 2, 3]"

...如何将其转换为List[Int]?以下语句返回JsValue,其中不包含方法read

Json.parse(jsonStr)

1 个答案:

答案 0 :(得分:4)

Play提供了几种解码JSON的方法。 “最简单”是as

scala> import play.api.libs.json._
import play.api.libs.json._

scala> val jsonStr = "[1, 2, 3]"
jsonStr: String = [1, 2, 3]

scala> val json = Json.parse(jsonStr)
json: play.api.libs.json.JsValue = [1,2,3]

scala> val xs = json.as[List[Int]]
xs: List[Int] = List(1, 2, 3)

但是,如果您实际上没有整数列表,则会抛出异常,因此通常是个坏主意。 asOptvalidate要好得多:

scala> val xsMaybe = json.asOpt[List[Int]]
xsMaybe: Option[List[Int]] = Some(List(1, 2, 3))

scala> val xsResult = json.validate[List[Int]]
xsResult: play.api.libs.json.JsResult[List[Int]] = JsSuccess(List(1, 2, 3),)

现在你被类型系统强迫处理错误的可能性,这意味着在运行时会有更少的意外。

所有这些方法都采用隐式Reads[_]参数。 Play会为Reads[Int]Reads[List[A: Reads]]提供开箱即用的实例,您可以通过定义自己的Reads实例来获得自己类型的相同语法。