【发布时间】:2016-05-03 03:03:20
【问题描述】:
我有两个类,每个类都包含另一个:
import play.api.libs.json.Json
case class Param(name: String,
data: ParamData)
case class ParamData(`type`: String,
value: String,
options: Option[List[Param]])
implicit val paramDataJsonFormat = Json.format[ParamData]
implicit val paramJsonFormat = Json.format[Param]
当我定义 Json 格式时出现编译错误:
错误:(110, 51) 没有可用的 List[Param]] 的隐式格式。
隐式val paramJsonFormat = Json.format[Param]
如果我改变隐含的顺序,我会在另一行得到同样的错误:
错误:(110, 51) 没有可用的 List[ParamData]] 的隐式格式。
隐式 val paramDataJsonFormat = Json.format[ParamData]
我该如何解决这个问题?
【问题讨论】:
-
你将如何实例化这些类之一?我看到的唯一方法是在两者之一中添加
null或在ParamData中添加一个空列表。 -
@EndeNeu 你是对的。
ParamData的options成员是可选的。我将编辑问题。谢谢 -
这并没有改变我的暗示,通常当我最终得到循环引用时,这是因为我的设计存在缺陷,在你的情况下,即使你使用选项,你仍然可以拥有
None或带有空列表的Some,正如您所看到的那样有很大的不同。 -
假设你必须用一个对象来建模一个菜单项。菜单项具有名称和(可选)一系列子项。您将如何对其建模以避免循环引用?
-
我承认我从未遇到过这种情况,但这是有道理的。然后您需要编写自己的格式(
new Format[Param] {...}),并手动处理存在None、Some以及空和非空列表的情况。你不能为此使用宏扩展。
标签: json scala playframework