在Play框架中进入JSON数组
我试图从远程http响应解析play框架中的一些json。我正在尝试进入结果[0]->locations[0]->latLng->lat。我正在使用playframework 2.0和scala 下面是我正在使用的代码,其中包含一些我迄今为止尝试过的注释示例在Play框架中进入JSON数组,json,scala,playframework-2.0,Json,Scala,Playframework 2.0,我试图从远程http响应解析play框架中的一些json。我正在尝试进入结果[0]->locations[0]->latLng->lat。我正在使用playframework 2.0和scala 下面是我正在使用的代码,其中包含一些我迄今为止尝试过的注释示例 val promise = WS.url("http://www.mapquestapi.com/geocoding/v2/address?...").get() val body = promise.value.get.body
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")
我从play framework获得的错误:
我试图解析的JSON:试试这个,顺序访问必须在路径遍历之后
val result = (json \ "results")(0)
val location = (result \ "locations")(0)
val lat = (location \ "latLng" \ "lat")
使用此功能,您可以构建单线解决方案:
(((json \ "results")(0) \ "locations")(0) \ "latLng" \ "lat")
我认为更好的方法是:
val resultsArray = (json \ "results").as[JsArray]
val locations = resultsArray \\ "locations"
此时,
locations
将是一个对象列表,您可以遍历这些对象,而不必通过它们的索引手动访问它们。这实际上是一种非常烦人的方法-还有其他方法吗?如果我不知道数组中的位置怎么办?