给出以下JSON字符串......
val jsonStr = "[1, 2, 3]"
...如何将其转换为List[Int]
?以下语句返回JsValue
,其中不包含方法read
:
Json.parse(jsonStr)
答案 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)
但是,如果您实际上没有整数列表,则会抛出异常,因此通常是个坏主意。 asOpt
和validate
要好得多:
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
实例来获得自己类型的相同语法。