当前位置: 首页 > 知识库问答 >
问题:

Circe解码用例类

广绪
2023-03-14

我有一个案例类如下:

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
    }
}

最后,道路案例类的编码器和解码器:

implicit val roadDecoder: Decoder[Road] = deriveDecoder
implicit val roadEncoder: Encoder[Road] = deriveEncoder

现在,我试图将json解析为列表[Road]

roadJson.as[List[Road]].toOption.getOrElse(List[Road]())

但是我不能解码它--由于getorelse方法中的“else”,我总是得到一个空列表,没有任何错误。
我做错了什么?提前谢了。

共有1个答案

邹铭
2023-03-14

当您使用.tooption.getorelse时,您将放弃解析JSON时可能返回的错误。

如果要查看错误,需要查看roadjson.as[list[Road]]返回的值

这里我最喜欢的选择是使用模式匹配来查看结果:

roadJson.as[List[Road]] match {
  case Left(error) => 
    println(error) // print to debug the error
    ... // do something in case of error
  case Right(roads) => ... // do something else
}

您粘贴的json也无效,它使用=而不是:

 类似资料:
  • 我想将FieldMmap类的集合保存为json字符串- ... etc-完整代码:https://github.com/alexeyOnGitHub/scala-typesafe/blob/master/src/main/scala/com/example/model/Field.scala Circe代码: 错误:(14,65)找不到io类型的延迟隐式值。circe。通用的解码。DerivedD

  • 问题内容: 我正在尝试使用scala json库Circe,将其包装在一个简单的特征中以提供往返于json的转换,我对此具有以下要求: 这样做的目的是简单地能够用任何对象调用JsonConverter并将其转换成json之类的东西,但是当我尝试对其进行编译时,我得到以下信息: 我当然可以拥有一个类,打算通过转换器放入的所有内容都继承自该类,但是我有一个印象,大约可以自动生成编码器/解码器? 问题答

  • 本文向大家介绍利用Python破解验证码实例详解,包括了利用Python破解验证码实例详解的使用技巧和注意事项,需要的朋友参考一下 一、前言 本实验将通过一个简单的例子来讲解破解验证码的原理,将学习和实践以下知识点:       Python基本知识       PIL模块的使用 二、实例详解 安装 pillow(PIL)库: 下载实验用的文件: 这是我们实验使用的验证码 captcha.gif

  • 本文向大家介绍C#集合类用法实例代码详解,包括了C#集合类用法实例代码详解的使用技巧和注意事项,需要的朋友参考一下 下面介绍C#的集合类 1ArrayList 2 Stack 3Queue 4Hashtable 5SortedList 总结 以上所述是小编给大家介绍的C#集合类用法实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站

  • 本文向大家介绍使用jquery解析XML示例代码,包括了使用jquery解析XML示例代码的使用技巧和注意事项,需要的朋友参考一下 xml文件结构:books.xml 页面代码: 效果图:

  • 问题内容: 有谁知道如何使用Base64在Base64中解码和编码字符串。我正在使用以下代码,但无法正常工作。 问题答案: 第一: 选择一种编码。通常,UTF-8是一个不错的选择。坚持绝对对双方都有效的编码。除了UTF-8或UTF-16之外,很少使用其他东西。 传输端: 将字符串编码为字节(例如) 使用该类将字节编码为base64 传输 接收端: 接收 使用该类将解码为字节 将字节解码为字符串(例