【问题标题】:Decoding Json with Circe when fields are incomplete字段不完整时使用 Circe 解码 Json
【发布时间】:2018-03-10 12:20:45
【问题描述】:

我有一个json格式的成绩单,里面有一堆单词

{
     "words": [{
          "duration": 123,
          "name": "world"
          "time": 234,
          "speaker": null
      }]
}

我一直在使用 Circe 对 Json 进行编码/解码。在这种特殊情况下:

import io.circe.generic.auto._
import io.circe.parser._

val decoded = decode[Transcript](transcriptJson)

我的 ADT 看起来像:

case class Word(
  duration: Double,
  name: String,
  time: Float,
  para: String,
  speaker: Option[String],
  key: Option[String] = None,
  strike: Option[String] = None,
  highlight: Option[String] = None
)

case class Transcript(words: List[Word])

有时单词有“strike”或“highlight”之类的键,但很可能没有。如果没有,我会收到以下错误消息。

Left(DecodingFailure([A]List[A], List(DownField(highlight), MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, DownArray, DownField(words))))

当“单词”没有所有字段时,正确解码它的最佳方法是什么?

【问题讨论】:

    标签: scala circe argonaut


    【解决方案1】:

    正如 Travis Brown 在 Gitter 上指出的那样:

    “这将与 generic-extras 一起工作:”

    import io.circe.generic.extras.Configuration
    
    implicit val config: Configuration = Configuration.default.withDefaults
    

    (加上 para 和 import io.circe.generic.extras.auto._ 的默认值)

    【讨论】:

    • Gitter 上的 Travis Brown 也指出:circe-generic-extras 现在在自己的存储库中,并且使用与 circe 其他部分略有不同的版本控制方案。例如现在有一个"io.circe" %% "circe-generic" % "0.12.3",但只有一个"io.circe" %% "circe-generic-extras" % "0.12.2"
    猜你喜欢
    • 2019-03-06
    • 2020-06-02
    • 2018-12-23
    • 2018-05-03
    • 2017-09-01
    • 1970-01-01
    • 2020-10-28
    • 2019-05-09
    • 2019-12-27
    相关资源
    最近更新 更多