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

时间:2015-01-09 07:40:56

标签: json scala json4s

我有一个使用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和其他一些人,但是并没有解决案例类的问题

1 个答案:

答案 0 :(得分:8)

我假设您希望{J}内的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))
}