Scala JSON4S 在字段反序列化期间返回三元组



我正在使用 JSON4S,当相应对象的字段是一个选项时,它会正确处理缺少的字段。我正在使用

implicit val formats =
  Serialization.formats(NoTypeHints) +
    new org.json4s.ext.EnumNameSerializer(E)

read[T](json).

这是完美的,除了一件事。我想在缺失字段和null字段之间指定。对于我T的每个领域,我希望有一个类似Triple的东西,而不是Option,其中这个三元组要么是Some(t)Missing,要么类似于Option的工作方式Nullified。我在定义这样的结构时没有问题,但不幸的是,我对 JSON4S 的工作原理不太熟悉,或者我如何(也许)"拦截"字段的解析以实现这样的值提取。

作为替代方案,如果解析器将相应的T字段设置为 null 如果字段field: null而不是将其设置为 None ,那也很棒。我认为这不会让人感到斯卡拉什。

您可能

应该为T实现自定义序列化程序。我会使用以下格式,因为它允许更大的灵活性和与顺序无关的输入:

import org.json4s.CustomSerializer
import org.json4s.JsonAST._
import org.json4s.JsonDSL._
case class Animal(name: String, nrLegs: Int)
class AnimalSerializer extends CustomSerializer[Animal](format => ( {
  case jsonObj: JObject =>
    val name = (jsonObj  "name") //JString
    val nrLegs = (jsonObj  "nrLegs") //JInt
    Animal(name.extract[String], nrLegs.extract[Int])
}, {
  case animal: Animal =>
    ("name" -> animal.name) ~
      ("nrLegs" -> animal.nrLegs)
}
))

要处理空/空值,请查看 JSValue 特征。对于空值,应与JNull匹配,对于不存在的值,应与JNothing匹配。

相关内容

  • 没有找到相关文章

最新更新