将JsValue转换为String

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)

Mar*_*ier 7

你想组成多个选项,这就是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例如.