2017-09-28 1 views
2

J'ai un relevé de notes au format JSON avec un tas de mots ilDécodage JSON avec Circé lorsque les champs sont incomplets

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

J'utilise Circé pour encoder/décoder JSON. Dans ce cas particulier:

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

val decoded = decode[Transcript](transcriptJson) 

Et mon ADT ressembler à:

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

Parfois les mots clés ont comme « grève » ou « point fort », mais très probablement pas. Lorsque ce n'est pas le cas, j'obtiens le message d'erreur suivant. Quel serait le meilleur moyen de le décoder correctement quand un "mot" n'a pas tous les champs?

Répondre

2

Comme Travis Brown a souligné le Gitter:

"cela fonctionnerait en l'état avec extras-générique:"

import io.circe.generic.extras.Configuration 

implicit val config: Configuration = Configuration.default.withDefaults 

(plus une valeur par défaut pour les para et import io.circe.generic.extras.auto._)