【问题标题】:How to use nested case classes and spray json implicits如何使用嵌套案例类和喷射 json 隐式
【发布时间】:2017-01-20 03:05:21
【问题描述】:

我正在尝试使用 spray.io json 将案例类转换为 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,但结果相同。搜索stackoverflow我只看到这个与generics相关的错误,这不是。

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

【问题讨论】:

    标签: json scala spray


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        • 1970-01-01
        • 2018-02-08
        • 2015-10-03
        相关资源
        最近更新 更多