【发布时间】:2021-08-29 03:36:54
【问题描述】:
我有以下 JSON 结构:
{
"e":[],
"r":{
"foo":[
[
"abc",
1
],
[
"def",
2
],
]
}
}
我正在尝试解码此结构并设置了以下案例类:
case class Baz(e : List[String], r : List[Data])
数据在哪里
case class Data(a : String, b : Int)
所以我按如下方式设置我的 circe 解码器:
object Data{
implicit val decoder : Decoder[Data] (c : HCursor) =>
for {
a <- c.downN(0).as[String]
b <- c.downN(1).as[Int]
}yield(Data(a,b))
}
Baz 解码器的明显实现是
object Baz{
implicit val decoder : Decoder[Baz] (c : HCursor) =>
for {
e <- c.downField("e").as[List[String]]
r <- c.downField("r").downField("foo").as[List[Data]]
}yield(Baz(e,r))
}
但是,我想将相同的 Baz 解码器用于其他仅在键名“foo”上有所不同的 JSON 值。也就是说,“foo”可能是“bar”之类的其他东西。
我如何告诉/移动光标,使其与 List[Data] 的键值无关地工作?
【问题讨论】: