Я пытаюсь написать приложение scala для проверки JSON. У меня есть класс Animals.scala, который определяет следующее:Проверка JSON с использованием Scala
case class Animals (id: Int, type: String, targets: String)
object Animals {
implicit val reads: Reads[Animals] = (
(JsPath \ "id").read[Int] and
(JsPath \ "type").read[String] and
(JsPath \ "targets").read[String])(Animals.apply _)
}
У меня есть Application.scala, где я попытался проверить входящий JSON против класса дела.
object Application extends Controller {
// action for JSON validation
def validateRequest = Action { implicit request =>
// this will fail if the request body is not a valid json value
val bodyAsJson = request.body.asJson.get
bodyAsJson.validate[Animals] match {
case success: JsSuccess[Animals] => {
val id = success.get.id
Ok("Validation passed! id is "+ id)
}
case JsError(error) => BadRequest("Validation failed!")
}
}
}
И, наконец, вот мой JSON ввода:
{
"id" : 1,
"type" : "domestic",
"targets": {
"AND": [
{
"breed": ["greyhound", "dalmatian"]
},
{
"NOT": {
"color": ["amber", "pale_amber", "black"]
}
},
{
"zipcode": ["90210", "90211"]
}
]
}
}
И я получаю следующее сообщение об ошибке: JsError(List((/targets,List(ValidationError(error.expected.jsarray,WrappedArray())))))
Я понимаю, что ошибка возникает из-за targets
поле не так просто, как a String
по сравнению с моим JSON. Как это сделать, чтобы проверка прошла? Должен ли я делать List[List[String]]
или что-то в этом роде?
Спасибо! Это прошло проверку. Как бы тяжело было, если бы я должен был проверять содержимое «целей» или что было бы правильным подходом? – summerNight
реализовать классы и «Читает» для них, чтобы они соответствовали структуре вашего json –