在upickle中,如何使用由缺失字段序列化的可选字段读取json
我使用upickle在scalajs中序列化json。我需要能够解析可选字段,由空值和缺少的字段(web上的标准json)表示 使用OptionPickler,我可以接受可为空的项。 但是,如何接受缺少的字段? 下面的示例处理空的在upickle中,如何使用由缺失字段序列化的可选字段读取json,json,scala,scala-option,upickle,Json,Scala,Scala Option,Upickle,我使用upickle在scalajs中序列化json。我需要能够解析可选字段,由空值和缺少的字段(web上的标准json)表示 使用OptionPickler,我可以接受可为空的项。 但是,如何接受缺少的字段? 下面的示例处理空的名称字段,但在缺少的地址字段上失败 // from http://www.lihaoyi.com/upickle/ -> object OptionPickler object OptionPickler extends upickle.AttributeTagg
名称
字段,但在缺少的地址
字段上失败
// from http://www.lihaoyi.com/upickle/ -> object OptionPickler
object OptionPickler extends upickle.AttributeTagged {
override implicit def OptionWriter[T: Writer]: Writer[Option[T]] =
implicitly[Writer[T]].comap[Option[T]] {
case None => null.asInstanceOf[T]
case Some(x) => x
}
override implicit def OptionReader[T: Reader]: Reader[Option[T]] = {
new Reader.Delegate[Any, Option[T]](implicitly[Reader[T]].map(Some(_))) {
override def visitNull(index: Int) = None
}
}
}
case class Person(id: Int, name: Option[String], address: Option[String])
implicit val personRW: OptionPickler.ReadWriter[Person] = OptionPickler.macroRW[Person]
val personJson = """{"id": 1, "name": null}"""
println(OptionPickler.read[Person](personJson))
Exception: upickle.core.Abort: missing keys in dictionary: address