6

我正在尝试从远程 http 响应中解析播放框架中的一些 json。我正在尝试进入结果 [0]->locations[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")

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

4

2 回答 2

8

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

val result = (json \ "results")(0)
val location = (result \ "locations")(0)
val lat = (location \ "latLng" \ "lat")

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

(((json \ "results")(0) \ "locations")(0) \ "latLng" \ "lat")
于 2012-12-19T23:18:57.970 回答
6

我认为更好的方法是:

val resultsArray = (json \ "results").as[JsArray]
val locations = resultsArray \\ "locations"

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

于 2013-12-03T10:20:07.463 回答