【发布时间】:2014-12-14 22:45:22
【问题描述】:
在 Play 2.3 中,我有一个带有单个可选双精度成员的案例类:
case class SomeClass(foo: Option[Double])
我需要一个 JSON 写入转换器来处理可以为空的成员:
implicit val someClassWrite: Writes[SomeClass] = ???
case class DisplayName(name:String)
implicit val displayNameWrite: Writes[DisplayName] = Writes {
(displayName: DisplayName) => JsString(displayName.name)
}
但遗憾的是,我无法弄清楚如何为 1) 单个可空值和 2) 双精度执行此操作。有任何想法吗?谢谢。
更新 #1: 我能想到的唯一解决方案是:
implicit val someClassWrite: Writes[SomeClass] = Writes {
(someClass: SomeClass) => someClass.foo match {
case Some(f) => JsNumber(BigDecimal(f))
case _ => JsNull
}
更新 #2: 忽略我的解决方案。特拉维斯布朗就是其中之一。
【问题讨论】:
-
所有 play docs 示例所做的就是将
String转换为JsString,在 JSON 中没有Option[Double]的类比。您能否提供更多背景信息? -
@LimbSoup 查看相同的文档:
case class DisplayName(name:String) val nameReads: Reads[DisplayName] = (JsPath \ "name").read[String].map(DisplayName(_))。通过使用.readNullable[Double]代替,这对于读取转换器非常有效。我正在寻找等效的写入转换器。 -
writeNullable[Double]?? -
@LimbSoup 我希望...
value map is not a member of play.api.libs.json.OWrites[Option[Double]] -
你想映射什么?就像我说的,需要更多的上下文..
标签: scala playframework scala-2.10 playframework-2.3