Json4s ignoring None fields during seriallization (instead of using 'null')

你。 提交于 2019-11-28 05:45:17

问题


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


回答1:


I assume that you would like to have Nones 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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!