在scala中使用circe时如何忽略序列化的字段

How to ignore a field from serializing when using circe in scala

我在 scala 中使用 circe 并且有以下要求:

假设我有一些像下面这样的 class,我想避免密码字段被序列化,那么有没有什么办法让 circe 知道它不应该序列化密码字段?

在其他库中,我们有像@transient 这样的注释来防止字段被序列化,在circe 中是否有这样的注释?

case class Employee(                   
                     name: String,
                     password: String)

您可以制作一个自定义编码器来编辑某些字段:

implicit val encodeEmployee: Encoder[Employee] = new Encoder[Employee] {
  final def apply(a: Employee): Json = Json.obj(
    ("name", Json.fromString(a.name)),
    ("password", Json.fromString("[REDACTED]")),
  )
}

稍后更新

为了避免通过 semiauto/auto 解码器的所有字段 contramap:

import io.circe.generic.semiauto._

implicit val encodeEmployee: Encoder[Employee] =
  deriveEncoder[Employee]
    .contramap[Employee](unredacted => unredacted.copy(password = "[REDACTED]"))