重载的方法值适用于带有可选类型类的替代方法

时间:2019-05-07 12:06:03

标签: scala play-json

我正在尝试与JsObject进行案例类之间的解析,但是遇到了我不清楚的重载方法错误。

错误消息显示“方法的重载值适用于替代方法”。

这是读取代码:


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


implicit val accountCreatedReads: Reads[AccountCreated] = (
      (JsPath \ "eventId").read[String] and
      (JsPath \ "timestamp").read[OffsetDateTime] and
      (JsPath \ "accountId").read[String] and
      (JsPath \ "accountAttributes").readNullable[Attributes] and
      (JsPath \ "expirationTime").readNullable[Long]
  )(AccountCreated.apply _)

这是案例类:

case class AccountCreated(
  eventId: String,
  timestamp: OffsetDateTime,
  accountId: String,
  accountAttributes: Option[Attributes] = None,  // This is the line the error refers to
  expirationTime: Option[Long] = None
)

这是代表属性的类:

type Attributes = JsValue

有人可以帮我吗?这是我第一次使用play-json的这一部分,所以我想知道自己做错了什么。

1 个答案:

答案 0 :(得分:1)

因此,您想将属性读为Json。

 implicit val accountCreatedReads: Reads[AccountCreated] = (
      (JsPath \ "eventId").read[String] and
      (JsPath \ "timestamp").read[OffsetDateTime] and
      (JsPath \ "accountId").read[String] and
      (JsPath \ "accountAttributes").readNullable[String].map(Json.parse(_)) and //returns JsValue
      (JsPath \ "expirationTime").readNullable[Long]
  )(AccountCreated.apply _)

如果它确实是JSON,则

(JsPath \ "accountAttributes").readNullable[String].map(Json.parse(_))

应该可以解析它。