0

私はタイプ Wf を持っています

case class Wf(id: Option[WfId], socId: SocId, year: Int, employment: Float) extends WithId[WfId]

アルゴナウトデコーダーを定義する次の暗黙的な関数があります

implicit def WfDecodeJson: DecodeJson[Wf] = {
  DB.withSession {
    implicit session: Session =>
      DecodeJson(c => for {
        id <- (c --\ "id").as[Option[WfId]]
        socCode <- (c --\ "soc").as[Int]
        year <- c.--\("predictedEmployment").\\.--\("year").as[Int]
        employment <- c.--\("predictedEmployment").\\.--\("employment").as[Float]
      } yield Wf(None,
          SocSchema.socsTable.filter(_.code === 2216).first.id.get,
          year,
          employment))
  }
}

ここに私がデコードしようとしているjsonがあります

{
soc: 2216,
predictedEmployment: [
{
year: 2014,
employment: 19916.416015625
},
{
year: 2015,
employment: 20252.84375
},
{
year: 2016,
employment: 20345.037109375
},
{
year: 2017,
employment: 20640.29296875
},
{
year: 2018,
employment: 21200.6328125
},
{
year: 2019,
employment: 21564.833984375
},
{
year: 2020,
employment: 21896.298828125
},
{
year: 2021,
employment: 22376.546875
},
{
year: 2022,
employment: 22867.8828125
}
]
}

私が行った場合

json.decodeOption[Wf]

期待どおりの結果が得られました(Wf)

私が行った場合

json.decodeOption[List[Wf]]

私はニルを得ます。暗黙のデコーダーにブレークポイントを追加すると、Wf を要求するだけで for 理解に入ります。リスト[Wf]を要求しても、理解のために入力することさえないようです

私が行った場合

json.decodeValidation[List[Wf]]

私は得る

Failure([A]List[A]: [])

私は何を間違っていますか?

4

2 に答える 2

1

{JSON はではなくで始まる[ため、 として解析できる配列ではありませんList[T]

于 2015-02-08T19:54:44.187 に答える
0

カーソルを使用して手動で DecodeJson インスタンスを手動で記述するよりも、casecodec2 や friends.GeneratedDecodeJsons などのメソッドを使用する方がはるかに優れています。

于 2015-02-08T22:59:47.053 に答える