Я использую play-json_2.11 и пытаюсь рекурсивно анализировать некоторые классы дел
sealed trait Tree
case class Node(value: Float, child: Seq[Tree]) extends Tree
case class Leaf(leaf: Float) extends Tree
Таким образом, в основном каждый узел содержит значение и список деревьев (который может быть узлом).или Лист).
Поэтому я определяю неявных читателей в сопутствующих объектах классов case.и один в объекте с именем Tree
object Node {
implicit val reader = Json.reads[Node]
}
object Leaf {
implicit val reader = Json.reads[Leaf]
}
object Tree {
implicit val treeReads =
__.read[Node].map(x => x:Tree) orElse __.read[Leaf].map(x => x:Tree)
}
Поскольку парсеры ссылаются друг на друга, я не могу определить их и получить следующую ошибку:
ScalaFiddle.scala:9: error: No instance of play.api.libs.json.Reads is available for scala.Seq[ScalaFiddle.Tree] in the implicit scope (Hint: if declared in the same file, make sure it's declared before)
implicit val reader = Json.reads[Node]
Как я могу разобратьДерево в этом случае?(Мне не нужно, чтобы это была особая черта)
Вот скрипка, которую я пробовал https://scalafiddle.io/sf/sX8OkWI/3
Мой ввод - это json, подобный этому
{
"value": 1.0,
"child": {
"leaf": 2.0
}
}
И я хотел бы разобрать это, чтобы иметь
Node(1.0, Leaf(2.0))