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

How to define circular referenced JSON definition by using 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)))

请多多指教

嗯,你有 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)))
}