J'ai deux classes qui héritent d'un parent commun. Je voudrais avoir un lecteur JSON commun dans le parent qui retournera un enfant approprié basé sur JSON fourni. Il est plus facile de l'expliquer avec un exemple d'extrait ci-dessous;Condition JSON lit dans scala
import play.api.libs.json.{JsPath, JsonValidationError, Reads}
sealed abstract class Animal(sound: String)
case class Goat(hooves: String) extends Animal("meh")
case class Cat(needsMilk: Boolean) extends Animal("meow")
val json ="""{"type": "goat", "hooves": "All good for climbing trees"}"""
object Animal {
val isSupportedAnimal: Reads[String] =
Reads.StringReads.filter(JsonValidationError("Unsupported animal"))(str => {
List("goat", "cat").contains(str)
})
val animalReads: Reads[Animal] = ((JsPath \ "type").read[String](isSupportedAnimal) and
//if animal is cat, use the cat specific reads and return a cat object
//if animal is goat, use goat specific reads and return a goat
)()
}
Compte tenu de la json
dans l'extrait, je voudrais l'avoir Goat
objet parce que le type spécifié est goat
. Je suis novice en matière de scala, donc je pourrais aborder le problème de manière erronée. Les suggestions sont les bienvenues.
Merci. Je vois la lumière dans cette réponse. J'essaie de compiler votre extrait pour le moment. J'apprécierais si vous pouvez mettre quelque chose qui compile mais je vois votre point. – ivanorone