Как читать необязательные значения json в классе case с использованием комбинаторов scala

Я пытаюсь обработать JSON, который может иметь информацию и ее содержимое. Который захвачен в следующем классе case и комбинатор для чтения JSON в объекте. Но код не компилируется. Есть ли лучший способ справиться с этим? Информация может быть пустой.

case class Info(sometimestamp: Option[Long])

object Info {
  implicit val InfoReads: Reads[Info] = (
    (JsPath \ "sometimestamp").readNullable[Long]
  )(Info.apply _)
}

{
  ...
  "info" : {
    "sometimestamp" : 1414535323436
  }
}

Ошибка компиляции:

found   : play.api.libs.json.Reads[Option[Long]]
[error]  required: play.api.libs.json.Reads[models.Payload.Info]
[error]   ) (Info.apply _)

версия scala: 2.11.2

Спасибо,

1 ответ

Решение

Я не думаю, что функциональный синтаксис для комбинаторов работает, когда вы на самом деле ничего не комбинируете. Это делает, однако:

implicit val InfoReads: Reads[Info] = 
    (JsPath \ "sometimestamp").readNullable[Long].map(Info(_))

Вы также можете рассмотреть возможность использования макроса JSON для такого простого класса:

implicit val InfoReads: Reads[Info] = Json.reads[Info]
Другие вопросы по тегам