给出以下JSON对象:
{realtime-accesses: [
{realtime-access: {
level: 2
marketID: 1
}},
{realtime-access: {
level: 4
marketID: 3
}}
]
}
我想要一个看起来像这样的Scala对象:
RealTimeAccesses(Map(1->2,3->4))
这是我试图使用的代码:
case class RealTimeAccesses(markets: Map[Int, Int])
object RealTimeAccesses {
implicit val realTimeAccessesFormatter: Format[RealTimeAccesses] = (
(__ \ "realtime_accesses").format[List[Map[String, Map[String, Int]]]].map(
_.iterator
.flatMap(_.values)
.map { v => v("marketID") -> v("level") }
.toMap).inmap(m => RealTimeAccesses(m), (m: RealTimeAccesses) => m.markets))
}
但是这不起作用,即时无法解析inmap
上的符号。
我的问题是:
type RealTimeAccess = Map[Int,Int]
代替案例类?答案 0 :(得分:0)
它不起作用的原因是<p>
没有仿函数。当您使用功能Format[A]
致电map
时,您将返回A => B
而不是Reads[B]
。
Format[B]
因此,您需要立即致电val format1: Format[List[Map[String, Map[String, Int]]]] = (__ \ "realtime_accesses").format[List[Map[String, Map[String, Int]]]]
val format2: Reads[Map[Int, Int]] = format1.map(
_.iterator
.flatMap(_.values)
.map { v => v("marketID") -> v("level") }
.toMap
)
并在.inmap
内进行所有必要的转换。
inmap