6

リモートhttp応答からplayフレームワークのjsonを解析しようとしています。結果[0]->場所[0]->latLng->latに入ろうとしています。私はscalaでplayframework2.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")

Play Frameworkから発生するエラー: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")

これにより、1行のソリューションを構築できます。

(((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 に答える