I am having a generic json serialization method that uses json4s
. Unfortunately, it is ignoring fields if the value is None
. My goal is to have None
fields be represented with a null
value. I tried by adding custom serializer for None, but still it is not working.
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))
}
Result from the above code :
{"x":"test"}
I tried this link and some others, but is is not solving the issue for case classes
edi
I assume that you would like to have None
s serialized to null
within your JSON. In this case it is sufficient to use 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))
}
来源:https://stackoverflow.com/questions/27855934/json4s-ignoring-none-fields-during-seriallization-instead-of-using-null