如何使用嵌套案例 类 和喷射 json 隐式

How to use nested case classes and spray json implicits

我正在尝试将大小写 类 转换为 json spray.io json。代码如下:

case class Value(amt: Int)
case class Item(name: String, count: Value)
object MyJsonProtocol extends DefaultJsonProtocol {
  implicit val itemFormat = jsonFormat2(Item)
}
import MyJsonProtocol._
import spray.json._
val json = Item("mary", Value(2)).toJson
println(json)

给出:

could not find implicit value for evidence parameter of type onextent.bluecase.examples.ex1.ExampleJson2.MyJsonProtocol.JF[Value]

我也尝试为 Value 定义一个 JsonProtocol 但结果相同。搜索 Whosebug 我只看到与 generics 有关的错误,但事实并非如此。

我错过了什么? (现在重新阅读隐式...)

您的值 class 需要 json 格式,因为它是您的项目 class 的一部分。所以你的对象需要看起来像这样:

object MyJsonProtocol extends DefaultJsonProtocol {
 implicit val valueFormat = jsonFormat1(Value)
 implicit val itemFormat = jsonFormat2(Item)
}

StuartMcvean 提到的答案是正确的。但是我只想补充一点,声明隐式的顺序很重要。例如,下面的声明仍然会导致相同的失败。

object MyJsonProtocol extends DefaultJsonProtocol {
 implicit val itemFormat = jsonFormat2(Item)
 implicit val valueFormat = jsonFormat1(Value)
}