在Play Framework中加入JSON数组

Com*_*der 6 json scala playframework-2.0

我试图通过远程http响应解析播放框架中的一些json.我想进入结果[0] - >位置[0] - > latLng-> lat.我正在使用scala的playframework 2.0.

下面是我使用的代码,以及我迄今为止尝试过的几个注释示例.

  val promise = WS.url("http://www.mapquestapi.com/geocoding/v2/address?...").get()
  val body = promise.value.get.body
  val json = Json.parse(body)
  val maybeLat = (json \ "results" \ "0" \ "locations" \ "0" \ "latLng" \ "lat").asInstanceOf[String]
  //val maybeLat = (json \ "results[0]" \ "locations[0]" \ "latLng" \ "lat").asInstanceOf[String]
  //val maybeLat = (json \ "results(0) \ "locations(0) \ "latLng" \ "lat").asInstanceOf[String]

  Ok(body).withHeaders(CONTENT_TYPE -> "text/json")
Run Code Online (Sandbox Code Playgroud)

我从play框架获得的错误:http://pastebin.com/S5S3nY5D JSON我正在尝试解析:http://pastebin.com/7rfD0j2n

Jul*_*ont 9

试试这个,顺序访问必须在路径遍历之后.

val result = (json \ "results")(0)
val location = (result \ "locations")(0)
val lat = (location \ "latLng" \ "lat")
Run Code Online (Sandbox Code Playgroud)

有了这个,您可以构建您的单线解决方案:

(((json \ "results")(0) \ "locations")(0) \ "latLng" \ "lat")
Run Code Online (Sandbox Code Playgroud)


tic*_*fab 6

我认为更好的方法是:

val resultsArray = (json \ "results").as[JsArray]
val locations = resultsArray \\ "locations"
Run Code Online (Sandbox Code Playgroud)

此时,locations将是您可以遍历的对象列表,而无需通过索引手动访问它们.