Zur*_*iar 3 scala playframework-2.0 playframework-json
我有以下obj是JsObject:
val approx_pieces: Option[String] = (obj \ "approx_pieces").asOpt[String]
Run Code Online (Sandbox Code Playgroud)
Some("0")如果数据库中的大约是"0",则此代码将创建一个.
如何更改它以便None在字符串为"0"时创建它?
如果您已经拥有Option,并且在某些情况下不想使用该值,那么这filter是您最常用的选择:
val one = Option("1")
val zero = Option("0")
one.filter(_ != "0") //Some("1")
zero.filter(_ != "0") //None
Run Code Online (Sandbox Code Playgroud)
使用此方法,您的解决方案将是:
(obj \ "approx_pieces").asOpt[String].filter(_ != "0")
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用match声明执行此操作.JsValuePlay中的子类型都有一个unapply方法,因此您可以直接匹配它们:
(obj \ "approx_pieces") match {
case JsString(num) if num != "0" => Some(num)
case _ => None
}
Run Code Online (Sandbox Code Playgroud)
您可能也对该collect方法感兴趣:
(obj \ "approx_pieces").asOpt[String] collect {
case num if num != "0" => num
}
Run Code Online (Sandbox Code Playgroud)
collect 很好,因为它允许您同时过滤和映射.
您也可以同时使用上述两种方法:
Option(obj \ "approx_pieces") collect {
case JsString(num) if num != "0" => num
}
Run Code Online (Sandbox Code Playgroud)