json - Spray-json 递归 json 问题 - 找不到证据参数的隐式值

标签 json scala spray spray-json

您好,我在使用具有递归数据结构的 Spray-json 库解析 json 时遇到了一些麻烦。

我有以下案例类结构和定义的协议(protocol)

import spray.json.DefaultJsonProtocol
import spray.json._

case class OfferAnalysisReport(BUG: DleTN, DOM: DleTN) extends AnalyticalReport
case class DleTN(doc_count: Int, result: AggsDefinition)
case class BucketDefinition(key: String, doc_count: Int, result: Option[AggsDefinition])
case class AggsDefinition(buckets: List[BucketDefinition])

object OfferAnalysisReportProtocol extends DefaultJsonProtocol {
  implicit val aggsDefFormat = lazyFormat(jsonFormat(AggsDefinition,"buckets"))

  implicit val bucketDefinitionFormat = lazyFormat(jsonFormat(BucketDefinition,"key","doc_count","result"))

  implicit val dleTypNemovitostisFormat = jsonFormat2(DleTypuNemovitosti)

  implicit val OfferAnalysisReportFormat = jsonFormat2(OfferAnalysisReport)
}

在测试中我导入:

import spray.json._
import OfferAnalysisReportProtocol._

但我仍然得到

Error: couldn't find implicit value for evidence parameter of type BuckedDefinition.

我在这里遗漏了一些重要的东西吗?有人可以给我提示吗?

最佳答案

您必须像您所做的那样用lazyFormat包装您的格式构造函数,但您还必须提供一个显式类型注释,如下所示:

implicit val fooFormat: JsonFormat[Foo] = lazyFormat(jsonFormat(Foo, "i", "foo"))

来源:https://github.com/spray/spray-json#jsonformats-for-recursive-types

关于json - Spray-json 递归 json 问题 - 找不到证据参数的隐式值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32633191/

相关文章:

c# - 如何使用 json.net 将 C# 通用列表转换为 json?

MySQL 对 JSON 数据进行全文搜索

java - 巴泽尔斯卡拉 "failed: Worker process did not return a WorkResponse"

java - 在Scala中使用泛型实现Java接口(interface),并返回null

scala - Spray.io logRequestResponse 到专用日志文件

android - 发送 base64 编码的图像会导致图像损坏

python - 如何将 Parse JSON 写入 CSV 文件?

generics - Scala 类无法覆盖扩展 java.util.comparator 的 Java 接口(interface)中的比较方法

json - 如何根据丰富进行动态调度?

scala - spray 中的便捷方法(即将成为 akka-http)创建带有主机端口和 contextRoot 的 Location header ?