Предположим, у меня есть следующие классы case, которые необходимо сериализовать как объекты JSON с помощью circe:
@JsonCodec
case class A(a1: String, a2: Option[String])
@JsonCodec
case class B(b1: Option[A], b2: Option[A], b3: Int)
Теперь мне нужно закодировать val b = B(None, Some(A("a", Some("aa")), 5)
как JSON, но я хочу иметь возможность контролировать, выводится ли он как
{
"b1": null,
"b2": {
"a1": "a",
"a2": "aa"
},
"b3": 5
}
or
{
"b2": {
"a1": "a",
"a2": "aa"
},
"b3": 5
}
Использование Printer
dropNullKeys
конфигурация, например. b.asJson.noSpaces.copy(dropNullKeys = true)
приведет к исключению None
из вывода, тогда как установка его на false
приведет к кодированию None
s как null
(см. также этот вопрос). Но как можно управлять этой настройкой для каждого поля?