作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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/
我是一名优秀的程序员,十分优秀!