Как читать необязательные значения 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]