【问题标题】:Is there a way to have optional fields in a Circe decoder?有没有办法在 Circe 解码器中设置可选字段?
【发布时间】:2018-07-18 07:24:42
【问题描述】:

我有一个案例类,其中每个字段都是可选的,例如:

case class Foo(name: Option[String],
               phone: Option[String],
               email: Option[String])

我试图为我的案例类创建一个手动解码器,发现解码器类似于:

implicit val decoder: Decoder[Foo] = (c: HCursor) => {
  for {
    name <- c.downField("name").as[String]
    phone <- c.downField("phone").as[String]
    email <- c.downField("email").as[String]
  } yield {
    new Foo(name, phone, email)
  }
}

但是检查downField方法,如果没有设置该字段,光标会切换到FailedCursor,所以会报错。

如果没有定义,我怎么能期望某些字段是可选的并返回None

【问题讨论】:

    标签: scala circe


    【解决方案1】:

    只要使用c.downField.as[Option[T]],你的代码就会是这样的:

    implicit val decoder: Decoder[Foo] = (c: HCursor) => {
      for {
        name <- c.downField("name").as[Option[String]]
        phone <- c.downField("phone").as[Option[String]]
        email <- c.downField("email").as[Option[String]]
      } yield new Foo(name, phone, email)
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-20
      • 2014-02-19
      • 2023-04-10
      • 2019-07-07
      • 2017-12-27
      • 2020-06-08
      • 2010-11-06
      • 1970-01-01
      相关资源
      最近更新 更多