0

オプションで「情報」とその内容を含むことができる JSON を処理しようとしています。これは、次のケース クラスと、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 _)

スカラバージョン: 2.11.2

ありがとう、

4

1 に答える 1

2

実際に何も組み合わせていない場合、コンビネータの関数構文は機能しないと思います。ただし、これは次のことを行います。

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

このような単純なケース クラスに JSON インセプション マクロを使用することを検討することもできます。

implicit val InfoReads: Reads[Info] = Json.reads[Info]
于 2015-01-30T22:00:07.347 に答える