Я пытаюсь создать декодер для моей модели Json, используя классы дел, но не могу найти способ декодировать список вариантов jsons.
object CirceTester {
def main(args: Array[String]): Unit = {
val json = """{
"foo": "bar",
"baz": "123.34",
"list of stuff": [ "4", "5", "6","24545","435.030" ],
"jsonlist": [ {"name":"Jesus","age":20},{"name":"Pedro","age":45}]
}
"""
case class Person(name:String,age:Int)
implicit val decodePerson : Decoder[Person] = {
Decoder.forProduct2("name","age")(Person.apply)
}
val parsedJson = parse(json)
val list = parsedJson match {
case Left(parsingFailure) => throw new Exception("Failed to parse Json")
case Right(parsedJson) => parsedJson.hcursor.downField("jsonlist").as[List[Person]]
}
}
}
Если Json написан таким образом, он работает нормально, но если у Json есть список вариантов Jsons, как в случае с jsonlist, код завершится ошибкой.
Например
val json = """{
"foo": "bar",
"baz": "123.34",
"list of stuff": [ "4", "5", "6","24545","435.030" ],
"jsonlist": [ {"name":"Jesus","age":20},{"name":"Pedro"}]
}
"""
В этом случае вторым элементом jsonlist является другой Json, в котором отсутствует поле «age», и, как я уже сказал, оно выдаст исключение. Могу ли я разобрать этот вложенный Json, даже если он не соответствует структуре класса case