如何使用任何作为case类的参数类型将scala case类编码为json?

时间:2017-09-08 10:11:44

标签: java json scala encoding circe

我有一个scala案例类如下

case class Intro(name : String, quality : Any)

我使用scala circe库将此对象编码为Json。 我正在使用的代码是

import io.circe._
import io.circe.generic.auto._
import io.circe.syntax._

object Example extends App{
      println(Intro("Vikash","something").asJson)    
}

编译过程中出现以下错误。

 could not find implicit value for parameter encoder: io.circe.Encoder[com.xxx.Intro]

如果我将案例类属性quality的类型更改为String类型,那么它可以正常工作。

如何使用属性

中的Any类型对案例类进行编码

由于

1 个答案:

答案 0 :(得分:1)

您的问题与您使用自动编解码器生成这一事实有关,这完全是编译时间,所以给定Any类型的值几乎不可能为它生成编解码器。您应该能够通过以下方式解决此问题:

  1. 使用泛型而不是Any,您必须确保您正在使用的类型有一个Encoder和Decoder类型的实例。您的课程应该如下所示:case class Intro[T](name: String, quality: T)。这样您就可以使用Intro [String],Intro [Int]等。
  2. 为Any类型提供您自己的编码器/解码器实例,这很难实现,对我来说是个不错的主意。
  3. 如果您不知道什么类型的类或隐式解析如何工作,您应该首先了解它们。