播放框架 - 跨领域阅读

时间:2016-04-03 15:37:49

标签: json parsing playframework playframework-2.0

有没有办法根据不同的字段读取字段?

这是案例类:

case class Person(children: List[String], hasChildren: Boolean)

我想根据子列表填写hasChildren。

所以我尝试了以下内容:

implicit val personReads: Reads[Person] = (
  (JsPath \ "children").readNullable[List[String]].map(_.getOrElse(List())) and
  (JsPath \ "hasChildren").read[Boolean](
    (JsPath \ "children").readNullable[List[String]].map{
      case Some(opt) => opt.nonEmpty
      case None => false
    }))

但是虽然我提供的孩子与无案例匹配,但返回false。

我做错了什么?有可能吗?

1 个答案:

答案 0 :(得分:1)

当然有可能。您正在考虑正确的方向(使用( (__ \ "children").readNullable[List[String]].map(_.getOrElse(List())) and (__ \ "children").readNullable[List[String]].map(_.exists(_.nonEmpty)) )(Person.apply _) )。您的读者必须

readNullable[T]

您必须实现具有属性顺序和类型的阅读器,例如您的案例类。路径中使用的属性名称并不重要。

重要提示: {{1}}在JsPath搜索可选字段或可空字段(未找到字段或null为无)。