2016-01-06 4 views
0

Я пытаюсь написать приложение 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]] или что-то в этом роде?

ответ

1

Если вам не нужна структура целей, прочитайте ее как объект JsObject. Он будет разбирать любую внутреннюю структуру таким образом.

+0

Спасибо! Это прошло проверку. Как бы тяжело было, если бы я должен был проверять содержимое «целей» или что было бы правильным подходом? – summerNight

+0

реализовать классы и «Читает» для них, чтобы они соответствовали структуре вашего json –