【发布时间】:2019-03-15 20:26:40
【问题描述】:
我有一个案例类如下:
case class Road(id: String, light: TrafficLight, cars: Map[String, String])
简单地说,我正在尝试解码 Json 到List[Road]。
我要解码的 Json 是:
[
{
"id" = "A",
"light" = "green",
"cars": [
{
"Nissan" : "100"
}
]
}
]
TrafficLight 是基本枚举:
object TrafficLight extends Enumeration {
type TrafficLight = Value
val red, yellow, green = Value
}
我已经为红绿灯构建了编码器和解码器:
implicit val trafficLightDecoder: Decoder[TrafficLight.Value] = Decoder.enumDecoder(TrafficLight)
implicit val trafficLightEncoder: Encoder[TrafficLight.Value] = Encoder.enumEncoder(TrafficLight)
我还为 Map[String,String] 类型构建了一个编码器:
implicit val encodeMap: Encoder[Map[String, String]] = new
Encoder[Map[String, String]] {
override def apply(values: Map[String, String]): Json = {
values.toList
.map(pair => Json.obj(
(pair._1, pair._2.asJson)
)).asJson
}
}
最后,Road 案例类的编码器和解码器:
implicit val roadDecoder: Decoder[Road] = deriveDecoder
implicit val roadEncoder: Encoder[Road] = deriveEncoder
现在,我正在尝试将 json 解析为 List[Road]。
roadJson.as[List[Road]].toOption.getOrElse(List[Road]())
但我无法对其进行解码 - 由于 getOrElse 方法中的“else”,我总是得到一个空列表,没有任何错误。
我究竟做错了什么?提前致谢。
【问题讨论】: