У меня есть класс дел , как показано ниже:
case class Road(id: String, light: TrafficLight, cars: Map[String, String])
Просто я пытаюсь декодировать Json в Список [Дорога] .
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)
Я также создал кодер для карты [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]())
Но я не могу его декодировать - я всегда получаю пустой список, из-за "else" в методе getOrElse
, без каких-либо ошибок.
Что я делаю не так?Заранее спасибо.