如何使用嵌套的case类和喷json implicits

时间:2016-09-12 15:55:54

标签: json scala spray

我正在尝试使用spray.io json将case类转换为data Work.SomeDataset; set Work.SomeDataset; SomeColumn = compress(SomeColumn,'&"'); run; 。以下代码:

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)

我也尝试为Value定义could not find implicit value for evidence parameter of type onextent.bluecase.examples.ex1.ExampleJson2.MyJsonProtocol.JF[Value] 但是也一样。搜索stackoverflow我只看到与JsonProtocol相关的错误,这不是。

我错过了什么? (现在重新阅读有关隐含的内容......)

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

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

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