如何使用spray-json定义循环引用的JSON定义?

时间:2017-10-05 02:43:59

标签: scala spray-json

我想用spray-json定义循环引用结构JSON,所以我尝试定义如下。

final case class A(b: B)
final case class B(a: A)

trait AProtocol extends DefaultJsonProtocol {
  implicit val aProtocol: RootJsonFormat[A] = rootFormat(lazyFormat(jsonFormat1(A)))
}

但是我收到了错误

<console>:18: error: could not find implicit value for evidence parameter of type MyProtocol.this.JF[B]
   implicit val aProtocol: RootJsonFormat[A] = rootFormat(lazyFormat(jsonFormat1(A)))

请给我一些建议。

1 个答案:

答案 0 :(得分:0)

嗯,你有一个用于A的jsonFormat,但对于B.你正在使用lazyFormat但是完全忘记了其他依赖。试试这个:

final case class A(b: B)
final case class B(a: A)

trait AProtocol extends DefaultJsonProtocol {
  implicit val aProtocol: RootJsonFormat[A] = rootFormat(lazyFormat(jsonFormat1(A)))
  implicit val bProtocol: RootJsonFormat[B] = rootFormat(lazyFormat(jsonFormat1(B)))
}