7

World Weather Online API から応答を受け取るレール アプリがあります。私は rest-client gem を使用しており、応答は JSON 形式です。

次を使用して応答を解析します。

parsed_response = JSON.parse(response)

parsed_response明らかにハッシュはどこにありますか。

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

最も内側にネストされたハッシュは inside["hourly"]であり、8 つのハッシュの配列で、それぞれに 20 個のキーがあり、さまざまな気象パラメーターの文字列値を保持しています。配列内のこれらの各ハッシュは、1 日の異なる時刻です (予測は 3 時間ごと、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")
4

1 に答える 1

7

JSONPathを見たいと思うかもしれません。それはまさにあなたが必要とすることをします。その構文は XPath と非常に似ていますが、JSONPath は JSON データで動作します (明らかなように)。

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

JSON 応答をテストする必要があるすべてのプロジェクトで個人的に使用しています。

于 2012-09-25T11:07:01.330 に答える