2012-09-25 20 views
6

World Weather Online APIから応答を受け取るレールアプリがあります。私は残りのクライアントの宝石を使用しており、レスポンスはJSON形式です。Rubyが深くネストされたJSON APIデータを取得する

私が使用して応答を解析:

parsed_response = JSON.parse(response) 

parsed_responseは明らかにハッシュです。

私が必要とするデータは、別のハッシュ内の別のハッシュ内の別の配列内のハッシュ内の配列内のハッシュ内の文字列です。

最も内側にネストされたハッシュは、["hourly"]の内側にあり、それぞれ20個のキーで構成され、さまざまな天候パラメータの文字列値を持つ8個のハッシュの配列です。配列内のこれらのハッシュは、それぞれ異なる時刻です(3時間ごとに3 * 8 = 24時間)。だから、

、私は午後9時メートルでうねり高さが必要な場合は、たとえば、私は次の呼び出しでそれを見つける:配列の第七の要素が"time" => "2100"

ながらに対応

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

私は間違いなくこの作業をすることができます。データベーステーブルのように、データにアクセスするより簡単な方法があるかどうか不思議です。アクティブレコードを使用できます。

答えて

6

JSONPathをご覧ください。それはまさにあなたが必要とするものです。その構文はXPathと非常によく似ていますが、JSONPathはJSONデータを使って動作します(明らかです)。

Rubyの実装があります:https://github.com/joshbuddy/jsonpath

私は個人的に私はJSONレスポンスをテストするために必要なすべてのプロジェクトでそれを使用します。

+0

"子供" => [{"" id "=>" 10 "、" text "=>"新着 "、"状態 "=> {"開かれた " > true、 "selected" => false}} – kpp