2016-12-04 3 views
1

JSONをYahoo APIから取得して、USDの変換率をSEKに変換しようとしています。しかし、JSONをハッシュに変換することはできません。JSONは1つの文字列として扱われるため、唯一のキーとして「クエリ」が表示されます。JSON文字列をnet/httpからHashに転送

JSON要求リターン:

{"query":{"count":1,"created":"2016-12-04T13:06:00Z","lang":"en-us","results":{"rate":{"id":"USDSEK","Name":"USD/SEK","Rate":"9.1900","Date":"12/2/2016","Time":"9:59pm","Ask":"9.2000","Bid":"9.1900"}}}} 

私のコードは次の通りである:

require 'net/http' 
require 'json' 

url = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22USDSEK%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=' 

uri = URI(url) 
response = Net::HTTP.get(uri) 
json_hash= JSON.parse(response) 

puts json_hash["Rate"] 

プット文戻っ 'nil' の

私はthis siteから例を以下試してみました、しかし、私は彼の静的に入力されている私のデータがもたらされている方法に基づいて同じ結果をもたらすことはありません。 *私は 'ostruct'を使用していません。単にjsonで試してみます。

ありがとうございました。

答えて

1

ご覧のとおり、探しているフィールドは内側のハッシュです。試してみてください

puts json_hash["query"]["results"]["rate"]["Rate"] 
+0

これは完全に機能しました、ありがとうございました! –

1

jsonの構造を確認しましたか?

{ 
    "query": { 
     "count": 1, 
     "created": "2016-12-04T13:06:00Z", 
     "lang": "en-us", 
     "results": { 
      "rate": { 
       "id": "USDSEK", 
       "Name": "USD/SEK", 
       "Rate": "9.1900", 
       "Date": "12/2/2016", 
       "Time": "9:59pm", 
       "Ask": "9.2000", 
       "Bid": "9.1900" 
      } 
     } 
    } 
} 

あなたのような何かを行う必要がありrateキーを取得するには、次の

json_hash["query"]["results"]["rate"] 

はあなたの問題を理解するために、上記のJSONであることを比較してください。

関連する問題