如何使用任何作为参数类型的案例class将scala案例class编码为json?
How to encode scala case class to json with any as parameter type of case class?
我有一个scala案例class如下
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]
如果我将案例类型 class 属性 quality
更改为类型 String
那么它就可以正常工作。
如何使用 Any
类型的属性
对大小写 class 进行编码
谢谢
您的问题与您正在使用自动编解码器生成这一事实有关,这完全是编译时间,因此给定类型 Any 的值几乎不可能为其生成编解码器。您应该能够通过以下方法之一解决此问题:
- 使用泛型而不是 Any,您必须确保有一个编码器和解码器类型的实例 class 您正在使用的类型。您的 class 应该看起来像这样而不是:
case class Intro[T](name: String, quality: T)
。这样你就可以使用 Intro[String], Intro[Int] 等等
- 为类型 Any 提供您自己的 Encoder/Decoder 实例,这很难实现,对我来说是个坏主意。
如果您不知道 classes 是什么类型或隐式解析如何工作,您应该首先了解它们。
我有一个scala案例class如下
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]
如果我将案例类型 class 属性 quality
更改为类型 String
那么它就可以正常工作。
如何使用 Any
类型的属性
谢谢
您的问题与您正在使用自动编解码器生成这一事实有关,这完全是编译时间,因此给定类型 Any 的值几乎不可能为其生成编解码器。您应该能够通过以下方法之一解决此问题:
- 使用泛型而不是 Any,您必须确保有一个编码器和解码器类型的实例 class 您正在使用的类型。您的 class 应该看起来像这样而不是:
case class Intro[T](name: String, quality: T)
。这样你就可以使用 Intro[String], Intro[Int] 等等 - 为类型 Any 提供您自己的 Encoder/Decoder 实例,这很难实现,对我来说是个坏主意。
如果您不知道 classes 是什么类型或隐式解析如何工作,您应该首先了解它们。