【问题标题】:Handling non-default nested Json Reads处理非默认嵌套 Json 读取
【发布时间】:2019-05-26 08:34:09
【问题描述】:

所以我有以下 JSON:

{
  "senderEmail" : "sender@email.com",
  "recipientEmails" : ["first@email.com", "second@email.com"]
}

并希望将其映射到案例类:

case class Payload (senderEmail: String, recipientEmails: Seq[String])

使用带有电子邮件验证器的 Play 的 Json Reads。

虽然 senderEmail 微不足道,但我在使用 recipientEmails 时遇到了问题,因为它既是 Seq 又是电子邮件,所以这将工作:

implicit val payloadRead: Reads[Payload] = (
    (JsPath \ "senderEmail").read[String](Reads.email) and
    (JsPath \ "recipientEmails").read[Seq[String]](Reads.seq))(Payload.apply _)

我收到overloaded method value read with alternatives

那么我怎样才能将 Reads.seq 和 Reads.email 结合起来呢?

【问题讨论】:

    标签: scala playframework play-json


    【解决方案1】:

    保持简单...

    scala> import play.api.libs.json._
    
    scala> import play.api.libs.functional.syntax._
    
    scala> case class Payload (senderEmail: String, recipientEmails: Seq[String])
    defined class Payload
    
    scala> implicit val reads: Reads[Payload] = (
         |   (JsPath \ "senderEmail").read(Reads.email) and
         |   (JsPath \ "recipientEmails").read(Reads.seq(Reads.email))
         | )(Payload.apply _)
    reads: play.api.libs.json.Reads[Payload] = play.api.libs.json.Reads$$...
    
    scala> Json.parse("""{
         |   "senderEmail" : "sender@email.com",
         |   "recipientEmails" : ["first@email.com", "second@email.com"]
         | }""").validate[Payload]
    res0: play.api.libs.json.JsResult[Payload] = JsSuccess(Payload(sender@email.com,Vector(first@email.com, second@email.com)),)
    

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2021-04-11
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多