gpt4 book ai didi

json - 带有泛型的 Scala Circe

转载 作者:行者123 更新时间:2023-12-04 22:11:30 25 4
gpt4 key购买 nike

我正在尝试使用 scala json 库 Circe,将它包装在一个简单的 trait 中以提供与 json 的转换,我有以下内容:

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

trait JsonConverter {
def toJson[T](t : T) : String
def fromJson[T](s: String) : T
}

case class CirceJsonConverter() extends JsonConverter{
override def toJson[T](t: T): String = t.asJson.noSpaces
override def fromJson[T](s: String): T = decode[T](s).getOrElse(null).asInstanceOf[T]
}

这样做的目的是简单地能够使用任何对象调用 JsonConverter 并将其转换为/从 json jsonConverter.toJson(0) must equalTo("0") ,但是当我尝试编译它时,我得到以下信息:
[error] could not find implicit value for parameter encoder: io.circe.Encoder[T]
[error] override def toJson[T](t: T): String = t.asJson.noSpaces
[error] ^
[error] could not find implicit value for parameter decoder: io.circe.Decoder[T]
[error] override def fromJson[T](s: String): T = decode[T](s).getOrElse(null).asInstanceOf[T]
[error] ^
[error] two errors found

我当然可以有一个类,我打算通过转换器继承的所有内容都可以继承,但我的印象是 circe 可以自动生成编码器/解码器?

最佳答案

除非您可以实现将任何对象转换为 Json 的策略,否则您想要的将不会起作用……这似乎不太可能。 Circe(和许多其他库)选择使用一种称为类型类的通用模式来方便地定义您想要如何做某事,在这种情况下 Encoder/Decoder , 用于特定类型。

如果您不熟悉类型类,我建议您研究它们。然后查看 Circe 文档,了解如何具体实现编码器/解码器。

关于json - 带有泛型的 Scala Circe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39648511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com