如何在Scala中使用Circe将嵌套json解码为列表[对象]

如何在Scala中使用Circe将嵌套json解码为列表[对象],json,scala,circe,Json,Scala,Circe,我有一个json,看起来有点像这样: implicit val singleResultDecoder: Decoder[SingleResult] = deriveDecoder[SingleResult] implicit val ResultsDecoder: Decoder[Results] = new Decoder[Results] { override def apply(c: HCursor): Result[Results] = { for {

我有一个json,看起来有点像这样:

implicit val singleResultDecoder: Decoder[SingleResult] = deriveDecoder[SingleResult]
implicit val ResultsDecoder: Decoder[Results] = new Decoder[Results] {
    override def apply(c: HCursor): Result[Results] = {
        for {
            results <- c.keys.map(_.map(k => c.downField(k).as[SingleResult]).toList)
        } yield Results(results = results)
    }
}
{
“结果”:{
“结果1”:{
“文本”:“abc”
},
“结果2”:{
“文本”:“def”
}
}
}
我希望将其解码为一个case类,如下所示:

case class Results(results: List[SingleResult])

case class SingleResult(text: String)
我希望为此编写一个解码器,但我当前的解码器尚未编译。看起来是这样的:

implicit val singleResultDecoder: Decoder[SingleResult] = deriveDecoder[SingleResult]
implicit val ResultsDecoder: Decoder[Results] = new Decoder[Results] {
    override def apply(c: HCursor): Result[Results] = {
        for {
            results <- c.keys.map(_.map(k => c.downField(k).as[SingleResult]).toList)
        } yield Results(results = results)
    }
}

任何关于如何修复错误的指导都将不胜感激。

您在这里混合了一些东西。在json中,您没有列表,因为您正在尝试读取它。你有地图。因此,我们需要相应的
解码器

implicit val ResultsDecoder: Decoder[Results] = new Decoder[Results] {
  override def apply(c: HCursor): Result[Results] = {
    for {
      results <- c.downField("results").as[Map[String, SingleResult]]
    } yield Results(results = results.values.toList)
  }
}
结果:

Right(Results(List(SingleResult(abc), SingleResult(def))))

代码运行。

您在这里混合了一些东西。在json中,您没有列表,因为您正在尝试读取它。你有地图。因此,我们需要相应的
解码器

implicit val ResultsDecoder: Decoder[Results] = new Decoder[Results] {
  override def apply(c: HCursor): Result[Results] = {
    for {
      results <- c.downField("results").as[Map[String, SingleResult]]
    } yield Results(results = results.values.toList)
  }
}
结果:

Right(Results(List(SingleResult(abc), SingleResult(def))))
代码运行