私はScalaとSwaggerを使用しています.Jsonの値をループしてチェックするなどの方法を理解する助けが必要です。HTTPから受け取ったJson Stringを解析して値をループする方法
リクエストHTTP GETを後に返されるJSON文字列は次のようになります。
{
"count": 3,
"items": [
{
"Id": "fd0a9e5a",
"DbName": "Xterior Prod",
"Name": "XP"
},
{
"Id": "4158a1a6",
"DbName": "Invidibi Pappear",
"Name": "ISP"
},
{
"Id": "7e0c57046d3f",
"DbName": "Multi Match Test",
"Name": "MMP"
}]
}
私のUIは、入力するユーザーIDを可能にします。私がしなければならないことは、APIから返されたJson値をループし、入力されたIDと一致するものを見つけることです。一度私が試合を見つけると、私はデータベースがそれに "テスト"キーワードを持っているかどうかをチェックする必要があります。もしそうなら、私は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 Environment(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/environments"))
val entity = httpResponse.getEntity
val content = fromInputStream(httpResponse.getEntity.getContent()).getLines().mkString
implicit val envReader = Json.reads[Environment]
val envList = (Json.parse(content) \ "items").as[List[Environment]]
envList.foreach { env =>
if (env.Id == EnvId)
if (env.DbName.contains("Test"))
println(env.DbName + " - " + env.Name)
else BadRequest("Not allowed")
else
BadRequest("ID not found")
}
ENVIDは、ユーザがinputed IDを保持する変数です。誰かがなぜエラーとそれを修正する方法を教えてもらえますか?ありがとう。
注:ここでは、インポートorg.json4s.JsonASTまたはインポートplay.api.libs.json
こんにちは、これを実装する方法はjson4sを使っているのですか?これらはすでにjsonが現在のプロジェクトで実装されている方法であり、私はこれらの同じライブラリを一貫性のあるものとして使うことを好むでしょう。 – oneDerer