我正在尝试使用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
相关的错误,这不是。
我错过了什么? (现在重新阅读有关隐含的内容......)
答案 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)
}