Play Framework - 使用案例类的Json.format案例类转换

时间:2015-09-18 13:24:43

标签: json scala playframework

我无法让以下工作,所以不知道它是否可能:

case class ItemA(name:String,itemB:ItemB)
case class ItemB(name:String)

object ToJson{
   implicit val itemAJson = Json.format[ItemA]
   implicit val itemBJson = Json.format[ItemB]
}

我收到类似的编译错误:

  

ItemB没有隐式格式可用。   [error]隐式val itemAJson = Json.format [ItemA]

很确定它无法完成,但有一种合理的方法吗?

Play Framework 2.3

2 个答案:

答案 0 :(得分:2)

由于你的ItemA依赖于ItemB所以为了创建json.Format [ItemA]必须首先定义json.Forma [ItemB],因此更改顺序首先定义itemBJson然后itemAJson

implicit val itemBJson = Json.format[ItemB]
implicit val itemAJson = Json.format[ItemA]

答案 1 :(得分:0)

另一个选择是 lazy (隐式变量)...这样,它不会影响您编写它的顺序。我有很多jsonFormat,它们都可以像这样正常工作:

object ToJson {
   implicit lazy val itemAJson = Json.format[ItemA]
   implicit lazy val itemBJson = Json.format[ItemB]
}

类似的是Play documentation中的解决方案。递归类型。