Kev*_*ith 9 json scala playframework-2.0
通读这篇文章,我无法弄清楚如何将我转换Some(JsValue)为String.
例:
val maybeString: Option[JsValue] = getSomeJsValue(); // returns Some(JsValue)
val str: String = maybeString match {
case Some(x) => x.as[String]
case _ => "0"
}
Run Code Online (Sandbox Code Playgroud)
运行时错误:
play.api.Application$$anon$1: Execution exception[[JsResultException: JsResultException(errors:List((,List(ValidationErr
or(validate.error.expected.jsstring,WrappedArray())))))]]
at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.3]
Run Code Online (Sandbox Code Playgroud)
你想组成多个选项,这就是flatMap的用途:
maybeString flatMap { json =>
json.asOpt[String] map { str =>
// do something with it
str
}
} getOrElse "0"
Run Code Online (Sandbox Code Playgroud)
或者作为理解:
(for {
json <- maybeString
str <- json.asOpt[String]
} yield str).getOrElse("0")
Run Code Online (Sandbox Code Playgroud)
我还建议使用map中的值并传递Option,这样一个None将由你的控制器处理并映射到BadRequest例如.