2012-10-30 173 views
1

我請求與以下網址方向:Ruby和谷歌地圖API

http://maps.googleapis.com/maps/api/directions/json?origin=43.656877,-79.32085&destination=Montreal&sensor=false 

然後,谷歌發回一個巨大的JSON,我想訪問一個更好的方式步驟莫過於:

response = open("http://maps.googleapis.com/maps/api/directions/json?origin=#{lat1},#{lng1}&destination=#{lat2},#{lng2}&sensor=false").read 
response = JSON.parse(response) 

response["routes"][0]["legs"][0]["steps"][0]["end_location"] 

是否有更美麗的方式來訪問end_location而不必使用所有這些數組符號?我想過使用OpenStruct,但它也不會很理想。

+0

你爲什麼不只是寫自己的類,你把要求的東西,它的一些不錯的解析方法?像''def end_location \ nresponse [「routes」] [0] [「legs」] [0] [「steps」] [0] [「end_location」] \ n end'' – 23tux

+0

這就是我正在做的。但是因爲項目的範圍發生了很大的變化,所以我最終可能會提取start_location或distance或其他內容。所以,我需要一個更靈活的語法來反覆做同樣的事情。 –

回答

3

您可以用first替換[0],這是更多的字符,但更簡單的概念和稍快。

response["routes"].first["legs"].first["steps"].first["end_location"] 

或者,你也可以這樣做:

["routes", 0, "legs", 0, "steps", 0, "end_location"].inject(response, &:fetch)