大家好,我遇到的circe库存在问题,无法在json和scala case类之间进行翻译,任何帮助将不胜感激。
过去我有这样的ADT。
sealed trait Sons
case class Son1(name: String, belongings: List[String]) extends Sons
case class Son2(lastName: String, belongings: List[String]) extends Sons
并且没有任何问题,但由于设计的原因,现在更改此特性的文件成本很高,我们必须从特性中删除密封,因此现在我们有了(儿子在不同的文件/库中)] >
trait Sons case class Son1(name: String, belongings: List[String]) extends Sons case class Son2(lastName: String, belongings: List[String]) extends Sons
[在尝试将儿子的列表从Scala转换为json时,库在列表产生问题之前将::放在这个例子中可以看到。
object Test extends App{ implicit val encoderSon1: Encoder[Son1]=deriveEncoder[Son1] implicit val decoderSon1: Decoder[Son1]=deriveDecoder[Son1] implicit val encoderSon2: Encoder[Son2]=deriveEncoder[Son2] implicit val decoderSon2: Decoder[Son2]=deriveDecoder[Son2] implicit val encoderSon: Encoder[Sons] = Encoder.instance { case son1: Son1 => son1.asJson case son2: Son2 => son2.asJson } implicit val DecoderSon: Decoder[Sons] = List[Decoder[Sons]]( Decoder[Son1].widen, Decoder[Son2].widen ).reduceLeft(_ or _) implicit val encoderSonList: Encoder[List[Sons]] = deriveEncoder implicit val DecoderSonList: Decoder[List[Sons]] = deriveDecoder val sonsList: List[Sons] = List(Son1("James",List()),Son2("Mike",List())) println(s"1->${sonsList}") println(s"2->${sonsList.asJson.noSpaces}") val andBack=decode[List[Sons]](sonsList.asJson.noSpaces).fold(fa=>fa.getMessage,fb=>fb.toString()) println(s"3->${andBack}") }
这些照片是printint
1->List(Son1(James,List()), Son2(Mike,List())) 2->{"::":[{"name":"James","belongings":[]},{"lastName":"Mike","belongings":[]}]} 3->Attempt to decode value on failed cursor: DownField(head),DownField(::)
问题是我当然不希望将列表转换为JSON时放在::字段中。
感谢您的帮助:D
[大家好,我在circe库之间遇到了在json和scala case类之间进行转换的问题,我们将不胜感激。过去我有这样的ADT。密封特征...
[对于List
请勿使用半自动-半自动使用的机制与其他派生方式略有不同,例如避免出现类似问题: