通读此文 article ,我不知道如何转换我的 Some(JsValue)
到一个字符串。
例子:
val maybeString: Option[JsValue] = getSomeJsValue(); // returns Some(JsValue)
val str: String = maybeString match {
case Some(x) => x.as[String]
case _ => "0"
}
运行时错误:
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]
最佳答案
你想组合多个选项,这就是 flatMap 的用途:
maybeString flatMap { json =>
json.asOpt[String] map { str =>
// do something with it
str
}
} getOrElse "0"
或者作为理解:
(for {
json <- maybeString
str <- json.asOpt[String]
} yield str).getOrElse("0")
我还建议使用 map 中的值并传递 Option ,因此 None 将由您的 Controller 处理并映射到
BadRequest
例如。
关于json - 将 JsValue 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18519913/