2012-12-19 13 views
6

Sto cercando di analizzare attraverso alcuni json nel framework di gioco da una risposta http remota. Sto cercando di entrare nei risultati [0] -> posizioni [0] -> latLng-> lat. Sto usando playframework 2.0 con scala.Passaggio a JSON Arrays in Play Framework

Di seguito è riportato il codice che sto usando con alcuni esempi commentati di ciò che ho provato finora.

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") 

errori che sto ricevendo dal quadro gioco: http://pastebin.com/S5S3nY5D JSON che sto cercando di analizzare: http://pastebin.com/7rfD0j2n

risposta

6

Penso che un modo molto migliore sarebbe:

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

a questo punto, locations sarà un elenco di oggetti che è possibile attraversare, senza doverli accedere manualmente tramite il loro indice.

8

Prova questa, l'accesso ordinali devono essere dopo il percorso che attraversa.

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

Con questo, si può costruire la soluzione di una sola riga:

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

la soluzione a una riga funzionava perfettamente. tyvm – Commander

+0

Questo è davvero un modo fastidioso per farlo - c'è un altro posto? –

+0

Cosa succede se non conosco la posizione del luogo nel mio array? –