【发布时间】:2017-01-20 11:49:56
【问题描述】:
我正在使用 Scala 和 Swagger,我需要帮助弄清楚如何遍历 json 中的值并将这些值用于检查和其他操作。
HTTP get 请求后返回的 json 字符串如下所示:
{
"count": 3,
"items": [
{
"Id": "fd0a9e5a",
"DbName": "Xterior Prod",
"Name": "XP"
},
{
"Id": "4158a1a6",
"DbName": "Invidibi Pappear",
"Name": "ISP"
},
{
"Id": "7e0c57046d3f",
"DbName": "Multi Test",
"Name": "MMP"
}]
}
我的 UI 允许用户输入 ID。我要做的是遍历从 API 返回的 Json 值,并找到与输入的 ID 匹配的值。找到匹配项后,我必须检查数据库中是否包含“Test”关键字。如果是这样,我将需要显示 DbName 和短名称。
我在这里找到了一些指南(例如Foreach with JSON Arrays in Play2 and 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 是保存用户输入的 ID 的变量。有人可以告诉我为什么会出现错误以及如何解决吗?谢谢。
注意:请使用 import org.json4s.JsonAST 或 import play.api.libs.json
【问题讨论】:
标签: json scala httpclient swagger scalatra