2012-09-25 37 views
6

我有一個Rails應用程序後者從世界天氣在線API的響應。我使用rest-client gem,響應採用JSON格式。紅寶石越來越深嵌套的JSON API數據

我解析使用響應:

parsed_response = JSON.parse(response) 

哪裏parsed_response顯然是一個哈希值。

我需要的數據是另一散列內另一散列內的另一個陣列內的散列內的陣列內的散列內的字符串。

最內部嵌套哈希值是內部["hourly"],8個散列,各有20個按鍵,具有各種氣候參數的字符串值的陣列。陣列中的每個散列都是一天中的不同時間(預測是三小時,3 * 8 = 24小時)。

因此,舉例來說,如果我想在晚上9米的涌浪高度,我用下面的電話找到它:

@swell_height = parsed_data["data"]["weather"][0]["hourly"][7]["swellHeight_m"] 

其中數組中的第7元對應"time" => "2100"

雖然我可以肯定地工作,我很好奇,是否有一種更直接的方式來訪問我的數據,就像它是一個數據庫表,我可以使用活動記錄,如:

@swell_height = parsed_data.swellHeight_m.where(:time => "2100") 

回答

6

你可能想看看JSONPath。它完全符合你的需求。它的語法與XPath非常相似,但JSONPath可以與JSON數據一起工作(如顯而易見)。

有一個Ruby實現:https://github.com/joshbuddy/jsonpath

我個人使用它在每一個項目中,我需要測試JSON響應。

+0

我怎麼找到這個「選擇」 - 「兒童」=> [{「id」=>「10」,「text」=>「新來港定居人士」,「國家」=> {「打開」 > true,「selected」=> false}} – kpp