Json4s 在序列化期间忽略 None 字段(而不是使用 'null')

Json4s ignoring None fields during seriallization (instead of using 'null')

我有一个使用 json4s 的通用 json 序列化方法。不幸的是,如果值为 None,它会忽略字段。我的目标是让 None 字段用 null 值表示。我尝试为 None 添加自定义序列化程序,但它仍然无法正常工作。

object test extends App {
          class NoneSerializer extends CustomSerializer[Option[_]](format => (
            {     
              case JNull => None
            },
            {
              case None => JNull

            }))

         implicit val f = DefaultFormats + new NoneSerializer

          case class JsonTest(x: String, y: Option[String], z: Option[Int], a: Option[Double], b: Option[Boolean], c:Option[Date], d: Option[Any])

          val v = JsonTest("test", None, None,None,None,None,None); 
println(Serialization.write(v))
}

以上代码的结果:

{"x":"test"}

我尝试了 this link 和其他一些方法,但没有解决案例类的问题

我假设您希望在您的 JSON 中将 None 序列化为 null。在这种情况下,使用 DefaultFormats.preservingEmptyValues:

就足够了
import java.util.Date
import org.json4s._
import org.json4s.jackson.Serialization

object test extends App {

  implicit val f = DefaultFormats.preservingEmptyValues // requires version>=3.2.11

  case class JsonTest(x: String, y: Option[String], z: Option[Int], a: Option[Double], b: Option[Boolean], c:Option[Date], d: Option[Any])

  val v = JsonTest("test", None, None, None, None, None, None);

  // prints {"x":"test","y":null,"z":null,"a":null,"b":null,"c":null,"d":null}
  println(Serialization.write(v))
}