私は obj が a である次のものを持っていますJsObject
:
val approx_pieces: Option[String] = (obj \ "approx_pieces").asOpt[String]
このコードはSome("0")
、データベースで約ピースが「0」の場合に を作成します。
None
文字列が「0」のときに作成するように変更するにはどうすればよいですか?
私は obj が a である次のものを持っていますJsObject
:
val approx_pieces: Option[String] = (obj \ "approx_pieces").asOpt[String]
このコードはSome("0")
、データベースで約ピースが「0」の場合に を作成します。
None
文字列が「0」のときに作成するように変更するにはどうすればよいですか?
すでに がありOption
、特定の場合に値を使用したくない場合filter
は、最も慣用的な選択です。
val one = Option("1")
val zero = Option("0")
one.filter(_ != "0") //Some("1")
zero.filter(_ != "0") //None
この方法を使用すると、ソリューションは次のようになります。
(obj \ "approx_pieces").asOpt[String].filter(_ != "0")
match
または、ステートメントを使用してこれを行うこともできます。JsValue
Play のすべてのサブタイプにはunapply
メソッドがあるため、それらを直接照合できます。
(obj \ "approx_pieces") match {
case JsString(num) if num != "0" => Some(num)
case _ => None
}
collect
次の方法にも興味があるかもしれません。
(obj \ "approx_pieces").asOpt[String] collect {
case num if num != "0" => num
}
collect
フィルタリングとマッピングを同時に行えるので便利です。
上記の両方の方法を一緒に使用することもできます。
Option(obj \ "approx_pieces") collect {
case JsString(num) if num != "0" => num
}