代码之家  ›  专栏  ›  技术社区  ›  Alberto Centelles

在字段不完整时使用Circe解码Json

  •  2
  • Alberto Centelles  · 技术社区  · 7 年前

    我有一份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)
    

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

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

    1 回复  |  直到 7 年前
        1
  •  6
  •   Alberto Centelles    7 年前

    正如特拉维斯·布朗在Gitter上指出的那样:

    “这将与通用附加功能一样有效:”

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

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