【发布时间】:2016-12-01 20:29:21
【问题描述】:
正在尝试为这个案例类编写一个 json 格式化程序
case class OptionRange[+T](start: Option[T], end: Option[T])
这是我目前所拥有的
implicit def fmt[T <: OptionRange[_]](implicit fmt: Format[Option[T]]): Format[OptionRange[T]] = new Format[OptionRange[T]] {
def reads(json: JsValue): JsSuccess[OptionRange[T]] = JsSuccess(new OptionRange[T] (
(json \ "start").as[Option[T]],
(json \ "end").as[Option[T]]
))
def writes(i: OptionRange[T]) = JsObject(Seq(
"start" -> Json.toJson(i.start),
"end" -> Json.toJson(i.end)
))
}
这段代码可以编译,但是当我尝试格式化 OptionRange[Int] 时,我收到一个错误,提示没有可用的隐式格式。
我怎样才能编写一个在隐式范围内可用的格式?
【问题讨论】:
-
请注意,
.as[Option[T]]不是在 Play-Json 中执行此操作的惯用方式。.readNullable[T]更可取。它会自动在Option中提升您的T -
其实@LouisF。
.readNullable[T]是JsPath上可用的方法,而不是JsValue... 请在下面查看我的答案
标签: json scala playframework playframework-2.4