41840


いつもお世話になっています。

現在、OpenWeatherMapのAPIを使って、天気や湿度、そして気温などを出力するプログラムをRubyで作成中です。

参考サイトは  
<https://qiita.com/nownabe/items/aeac1ce0977be963a740>  
です。

＜コード＞

[code]

    puts "都市名を入力してください"
    name = gets.chomp
    
    API_KEY = "my API KEY"
    BASE_URL = "http://api.openweathermap.org/data/2.5/forecast"
    
    require "json"
    require "open-uri"
    
    response = open(BASE_URL + "?q=#{name},jp&APPID=#{API_KEY}")
    data = JSON.parse(response.read, {symbolize_names: true})
    puts data[:list][0][:main][:temp]
    puts data[:list][0][:main][:humidity]
    puts data[:list][0][:main][:temp_min]
    puts data[:list][0][:main][:temp_max]
    puts data[:list][0][:weather][:main]
    
[/code]

＜エラーメセージ＞

[code]

    ex014.rb:16:in `[]': no implicit conversion of Symbol into Integer (TypeError)
        from ex014.rb:16:in `<main>'
    
[/code]

このエラーメッセージによると、おそらく数字の出力には問題がないと思うのですが、"Clear"などの文字列を出力する際に問題があるということだと思うのですが、どう解決すればいいでしょうか？  
お知恵をお貸しいただけたら幸いです。


CC BY-SA 3.0
2018-02-19T06:41:07.820
41839
2018-02-19T09:05:35.623
2018-02-19T06:51:15.853
19110
25182
question
ruby
JSONのエラー`[]': no implicit conversion of Symbol into Integer (TypeError)　を解決したい


エラーが出ているのは以下の行です。

[code]

    puts data[:list][0][:weather][:main]
    
[/code]

data[:list][0][:weather] は配列であるため、整数のインデックスでアクセスする必要がありますそこで :main
というシンボル(Symbol)を整数(Integer)に変換しようとして、変換できない内容のエラーが発生しています。

[code]

    `[]': no implicit conversion of Symbol into Integer (TypeError)
    
[/code]

以下のコードで期待する動作となりますでしょうか？

[code]

    puts data[:list][0][:weather][0][:main]
    
[/code]

また以下のようにして整形したJSONを保存しておくことで、JSONのデータ構造が確認しやすくなると思います。

[code]

    puts JSON.pretty_generate(data)
    
[/code]


CC BY-SA 3.0
2018-02-19T07:16:11.700
41840
2018-02-19T09:05:35.623
2018-02-19T09:05:35.623
27410
27410
41839
answer