在upickle中,如何使用由缺失字段序列化的可选字段读取json

在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

我使用upickle在scalajs中序列化json。我需要能够解析可选字段,由空值和缺少的字段(web上的标准json)表示

使用OptionPickler,我可以接受可为空的项。 但是,如何接受缺少的字段? 下面的示例处理空的
名称
字段,但在缺少的
地址
字段上失败

// 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