如何使用嵌套案例 类 和喷射 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)
}
我正在尝试将大小写 类 转换为 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)
}