我有一个使用的通用json序列化方法json4s。不幸的是,如果值为,它将忽略字段None。我的目标是None用null值表示字段。我尝试通过为None添加自定义序列化程序,但仍然无法正常工作。
json4s
None
null
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"}
我假设您想将Nones序列化到nullJSON中。在这种情况下,使用DefaultFormats.preservingEmptyValues:
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)) }