gpt4 book ai didi

json - 斯卡拉和瑟茜 : JSON encoding with optional fields

转载 作者:行者123 更新时间:2023-12-02 19:35:33 25 4
gpt4 key购买 nike

我正在尝试使用 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 字段?

最佳答案

如果您想定义自定义编码器而不依赖半自动,则可以使用以下方法

import io.circe.{Encoder, Json}
import io.circe.syntax._

object CirceOptional extends App {

case class Person(name: String, nickname: Option[String] = None)

val encodePerson: Encoder[Person] = (p: Person) => {
Json.obj(("name", p.name.asJson), ("nickname", p.nickname.asJson))
}

implicit val noNullEncoder: Encoder[Person] = encodePerson.mapJson(_.dropNullValues)

val persons = List (Person("John", None), Person("Tania", Some("Awesome")))

for(person <- persons)
println(person.asJson)

}

关于json - 斯卡拉和瑟茜 : JSON encoding with optional fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61096291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com