Я использую Scala и Swagger, и мне нужна помощь, чтобы понять, как перебирать значения в json и использовать эти значения для проверки и других целей.
Строка json, которая возвращается после HTTP-запроса на получение, выглядит следующим образом:
{
"count": 3,
"items": [
{
"Id": "fd0a9e5a",
"DbName": "Xterior Prod",
"Name": "XP"
},
{
"Id": "4158a1a6",
"DbName": "Invidibi Pappear",
"Name": "ISP"
},
{
"Id": "7e0c57046d3f",
"DbName": "Multi Test",
"Name": "MMP"
}]
}
Мой пользовательский интерфейс позволяет пользователю вводить идентификатор. Что мне нужно сделать, так это просмотреть значение Json, возвращенное из API, и найти тот, который соответствует введенному идентификатору. Как только я найду совпадение, я должен проверить, есть ли в базе данных ключевое слово «Test». Если это так, мне нужно будет показать DbName и короткое имя.
Я нашел здесь руководство (например, Foreach с массивами JSON в Play2 и Scala), но мне это не помогло. Когда я запускаю свой код, я получаю эту ошибку:
play.api.libs.json.JsResultException: JsResultException(errors:List(((0)/Id,List(ValidationError(List(error.path.missing),WrappedArray()))), ((0)/DbName,List(ValidationError(List(error.path.missing),WrappedArray()))), ((1)/Id,List(ValidationError(List(error.path.missing),WrappedArray()))), ((1)/DbName,List(ValidationError(List(error.path.missing),WrappedArray()))), ((2)/Id,List(ValidationError(List(error.path.missing),WrappedArray()))), ((2)/DbName,List(ValidationError(List(error.path.missing),WrappedArray()))),
Вот мой код:
case class DBInfo(Id: String, DbName: String, Name: String)
contentType = "application/json"
//get json from http
val httpClient = HttpClients.createDefault()
val httpResponse = httpClient.execute(new HttpGet("http://www.customers.com/dbInfo"))
val entity = httpResponse.getEntity
val content = fromInputStream(httpResponse.getEntity.getContent()).getLines().mkString
implicit val dbReader = Json.reads[DBInfo]
val dbList = (Json.parse(content) \ "items").as[List[DBInfo]]
dbList.foreach { dbI =>
if (dbI.Id == id)
if (dbI.DbName.contains("Test"))
println(dbI.DbName + " - " + dbI.Name)
else BadRequest("Not allowed")
else
BadRequest("ID not found")
}
id — это переменная, которая содержит введенный пользователем идентификатор. Может ли кто-нибудь сказать мне, почему ошибка и как ее исправить? Спасибо.
примечание: используйте import org.json4s.JsonAST или import play.api.libs.json