ich so ein json Validierungen für einen Filter implemente versuchen:Scala Prüft rekursive JSON mit Liest (Play Framework)
import play.api.libs.json._
import play.api.libs.functional.syntax._
trait IFilterClause
case class ComparisonClause(operand: String, operator: String, value: String, valueType: String) extends IFilterClause{
implicit val comparisonClauseReads: Reads[ComparisonClause] = (
(JsPath \ "operand").read[String] and
(JsPath \ "operator").read[String] and
(JsPath \ "value").read[String] and
(JsPath \ "value_type").read[String]
)(ComparisonClause.apply _)
}
case class LogicalClause(operator: String, children: List[IFilterClause]) extends IFilterClause {
implicit lazy val logicalClauseReads: Reads[IFilterClause] = (
(JsPath \ "logical_operator").read[String] and
((JsPath \ "children").read[LogicalClause] or (JsPath \ "children").read[ComparisonClause])
)(LogicalClause.apply _)
}
, wie Sie auf meine LogicalClause sehen können, könnte meine Kinder die eine json mit der sein das gleiche Format einer LogicalClause oder eines JSons mit dem Format eines ComparisonClause, aber ich kann es uns vorstellen, wie dies funktioniert.
Irgendwelche Vorschläge?
Ich erhalte die folgende Fehlermeldung:
No Json deserializer found for type com.userzoom.analytics.explorerapi.models.LogicalClause. Try to implement an implicit Reads or Format for this type. [error]
((JsPath \ "children").read[LogicalClause] or (JsPath \ "children").read[ComparisonClause])
Geben Sie einen Verweis auf die implizite Instanz selbst beim Aufruf von '.Read [SameType] (myImplicit)' für ein Kind Eigenschaft – cchantep
@cchantep ich so versucht: ((JsPath \ "children"). Lies [List [LogicalClause]] oder (JsPath \ "children"). LazyRead (Reads.list [IFilterClause] (ComparisonClause))) aber es funktioniert nicht, der Code beschwert sich über den Typ – Jean