3

我有一个通用的 json 序列化方法,它使用json4s. 不幸的是,如果值为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"}

我尝试了这个链接和其他一些链接,但没有解决案例类的问题

4

1 回答 1

10

我假设您希望将Nones 序列化到null您的 JSON 中。在这种情况下,使用就足够了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))
}
于 2015-01-09T09:26:32.777 回答