我正在尝试与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的这一部分,所以我想知道自己做错了什么。
答案 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(_))
应该可以解析它。