【发布时间】:2019-11-26 20:30:08
【问题描述】:
我正在尝试使用 circe 将 JSON 对象解码为对象列表。我只想使用JSON响应的一些字段来创建对象,所以我觉得我必须创建一个自定义解码器。
我要制作序列的类定义如下:
case class Review(Id: String, ProductId: String, Rating: Int)
我尝试像这样创建自定义解码器:
implicit val reviewDecoder: Decoder[Review] = Decoder.instance { c =>
val resultsC = c.downField("Results")
for {
id <- resultsC.downArray.get[String]("Id")
productId <- resultsC.downArray.get[String]("ProductId")
rating <- resultsC.downArray.get[Int]("Rating")
} yield Review(id, productId, rating)
}
reviewDecoder.decodeJson(json) 似乎只做第一个结果,而不是全部。
我有一个这样的 JSON 响应:
{
"Limit":2,
"Offset":0,
"TotalResults":31,
"Locale":"en_US",
"Results":
[
{"Id":"14518388",
"CID":"21a9436b",
"ProductId":"Product11",
"AuthorId":"jcknwekjcnwjk",
"Rating":3
},
{"Id":"14518035",
"CID":"8d67b6f5",
"ProductId":"Product11",
"AuthorId":"fnkjwernfk",
"Rating":3
}
],
"Includes":{},
"HasErrors":false,
"Errors":[]}
我希望能够使用 circe 来解析这个 JSON 对象来创建一个 Seq[Review],但我不知道怎么做。
****Edit** Luis 的回答确实回答了这个问题,但说我有一个更复杂的类,我想创建一个序列:
case class User(id: Int)
case class Review(user: User, ProductId: String, Rating: Int)
在这种情况下,我如何能够创建一系列评论?
【问题讨论】: