2016-01-26 3 views
1

У меня есть два класса, и каждый из них содержит другой:PLAY2 Scala - формат Json с круговой зависимостью

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 я получаю ошибку компиляции:

Error:(110, 51) No implicit format for List[Param]] available.

implicit val paramJsonFormat = Json.format[Param]

Если я изменю порядок имплицитов, я получаю ту же ошибку на другой строке:

Error:(110, 51) No implicit format for List[ParamData]] available.

implicit val paramDataJsonFormat = Json.format[ParamData]

Как это решить?

+1

Как вы собираетесь создать экземпляр одного из этих классов? Единственный способ, который я вижу, - добавить «null» в один из двух или пустой список в «ParamData». –

+0

@EndeNeu Вы правы. Элемент 'options'' ParamData' является необязательным. Я отредактирую вопрос. Спасибо – tano

+1

Это не меняет то, что я намекал, хотя, как правило, когда я заканчиваю циклическими ссылками, это потому, что в моем дизайне есть недостаток, в вашем случае, даже если вы используете опции, вы все равно можете иметь «Нет» или 'Some' с пустым списком, так как вы можете видеть, что есть большая разница. –

ответ

2

Обнаружено решение в Play official documentation. Существует определенный раздел, касающийся рекурсивных типов, которые я отсутствовал.

Смежные вопросы