【发布时间】:2020-07-20 14:31:32
【问题描述】:
我正在尝试使用 Circe 进行一些 JSON 编码,如下所示:
import io.circe.{Encoder, Json}
import io.circe.syntax._
case class Person(name: String, nickname: Option[String] = None)
object EncodingTest extends App {
val persons = List (Person("John", None), Person("Tania", Some("Awesome")))
implicit val encodePerson: Encoder[Person] = (p: Person) => {
Json.obj(
("name", Json.fromString(p.name)),
("nickname", Json.fromString(p.nickname.getOrElse(""))) // <- Problem is here
)
}
for(person <- persons)
println(person.asJson)
}
理想情况下,我希望得到以下输出:
{"name":"John"}
{"name":"Tania","nickname":"Awesome"}
如果字段值为None,如何让编码器跳过nickname字段?
【问题讨论】:
-
您可以使用自动派生,因此 circe 将为您的案例类创建
Encoder和Decoder,并为您提供所需的缺席字段行为:circe.github.io/circe/codecs/auto-derivation.html -
@IvanKurchenko 感谢您的评论!这将适用于我的实际用例(即不是我粘贴在顶部的过度简化的示例),我在其中定义自定义类型,但最终归结为可以通过自动派生处理的基本类型。