Json 播放框架:*pickBranch*和*或*

Json 播放框架:*pickBranch*和*或*,json,scala,playframework,Json,Scala,Playframework,在下面的语句中,pickBranch返回一个Reads ((__ \ 'firstName).json.pickBranch) 。。。我可以这样调用或: val emptyObj = __.json.put(Json.obj()) ((__ \ 'firstName).json.pickBranch or emptyObj) 如果pickBranch成功,则或返回pickBranch的结果,否则返回emptyObj 现在,是否可以调用pickBranch返回的读取数据上的或,并传递清空bj或

在下面的语句中,
pickBranch
返回一个
Reads

((__ \ 'firstName).json.pickBranch)
。。。我可以这样调用

val emptyObj = __.json.put(Json.obj())
((__ \ 'firstName).json.pickBranch or emptyObj)
如果
pickBranch
成功,则
返回
pickBranch
的结果,否则返回
emptyObj

现在,是否可以调用
pickBranch
返回的
读取数据上的
,并传递
清空bj
或返回的
pickBranch
内容

val emptyAllowed = true
((__ \ 'firstName).json.pickBranch or (if (emptyAllowed) emptyObj else >>>RESULT OF pickBranch<<<))
val emptyAllowed=true

(((uu\'firstName).json.pickBranch或(if(emptyAllowed)emptyObj else>>pickBranch的结果好,下面是解决方案。首先,我为
读取创建了一个扩展对象:

package object typeExtensions {

  import play.api.libs.json._
  import play.api.libs.functional.syntax._

  implicit class ReadsExtensions(reads: Reads[JsObject]) extends AnyVal {

    def orEmpty = reads | __.put(Json.obj())
    def orEmptyIf(b: Boolean) = if (b) orEmpty else reads 
  }
}
下面是如何使用它:

val canBeEmpty: Boolean = true
((__ \ 'firstName).json.pickBranch orEmptyIf canBeEmpty))
有关更多详细信息,请参阅我的完整答案。 我希望这有帮助