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