I am trying to use Circe to do some JSON encoding as follows:
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)
}
Ideally, I would like to have the following output:
{"name":"John"}
{"name":"Tania","nickname":"Awesome"}
How can I make the encoder skip the nickname field in case the field value is None?