2012-12-19 4 views
6

원격 http 응답에서 재생 프레임 워크의 일부 JSON을 구문 분석하려고합니다. 결과 [0] -> 위치 [0] -> latLng-> lat로 들어가려고합니다. 나는 scala와 함께 playframework 2.0을 사용하고있다.Play Framework에서 JSON 배열로 이동

아래 코드는 내가 지금까지 해봤 던 몇 가지 주석이 달린 예제를 사용하고 있습니다. 내가 플레이 프레임 워크는군요

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

답변

6

:

이 시점에서
val resultsArray = (json \ "results").as[JsArray] 
val locations = resultsArray \\ "locations" 

, locations이 될 것입니다이와

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

, 당신은 당신의 한 줄 솔루션을 구축 할 수 있습니다 색인을 통해 수동으로 액세스하지 않고도 트래 v 스 할 수있는 오브젝트 목록.

8

이 시도는, 순서 액세스 경로가 통과 이후 여야합니다. 내가 훨씬 더 좋은 방법이 될 것이라고 생각

(((json \ "results")(0) \ "locations")(0) \ "latLng" \ "lat") 
+0

한 줄짜리 솔루션이 아름답게 작동했습니다. tyvm – Commander

+0

실제로 그 일을하는 것은 상당히 짜증나는 방법입니다 - 다른 방법이 있습니까? –

+0

만약 내가 배열에서 위치의 위치를 ​​모른다면? –

관련 문제