В Play 2.3 у меня есть класс case с одним необязательным двойным членом:
case class SomeClass(foo: Option[Double])
Мне нужен преобразователь записи JSON, который обрабатывает член как обнуляемый:
implicit val someClassWrite: Writes[SomeClass] = ???
В документах Play приведен пример:
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: игнорировать мое решение. Трэвис Браун - тот самый.
String
вJsString
, аналога которому дляOption[Double]
в JSON нет. Не могли бы вы предоставить больше контекста? - person Michael Zajac   schedule 20.10.2014case class DisplayName(name:String) val nameReads: Reads[DisplayName] = (JsPath \ "name").read[String].map(DisplayName(_))
. Это отлично работает для преобразователя чтения, используя вместо этого.readNullable[Double]
. Я ищу аналогичный конвертер записи. - person Lasf   schedule 20.10.2014value map is not a member of play.api.libs.json.OWrites[Option[Double]]
- person Lasf   schedule 20.10.2014