Ruby 天気予報編 (6) JSON と Hash 【計算数学 I】

更新日時:

JSON と Hash

天気予報 API を使用するために

API とは Application Programming Interface の略で、検索すると色々めんどくさいことは書いていますが、つまるところ「仕様書通りに情報を送信すると返り値が返ってくる Web サービス」のことだと思っておけば足ります。そこで今回使う天気予報 API における

  • 仕様書通りに情報を送信する
  • 返り値

を知れば、天気予報を得ることができるようになります。 後者から説明すると、今回は JSON で返却されます。

結論を先に書くと以下の通りです。

  • 今回の API の返り値は Ruby 以外の言語でも取り扱える JSON で返却される。 JSON は API の代表的な返り値であり、全体はひとつの文字列である。
  • JSON は Ruby の Hash に変換できる。そのための標準添付ライブラリもある。

この 2 つの結論を総合すると、「 Ruby で天気予報 API の情報を加工するためには、JSON のことを詳しく知る必要はなく、 加工した後の Hash さえ使えればそれでよろしい 」ということになります。だから今まで Hash の説明はしっかりして、演習もしてもらったわけです。 JSON の説明は省略することにしましょう。

JSON と Hash を見比べる

とは言っても、 JSON とは何かが全くブラックボックスだとやりにくいと思います。 そこで JSON と Hash を見比べる程度のサンプルは示しておきたいと思います。

JSON とは全体としては文字列です。例えば

{"name":"miku","type":"Cute","age":15,"song":"おねだり Shall We 〜?"}

という文字列の JSON を Hash に変換すると

{"name" => "miku", "type" => "Cute", "age" => 15, "song" => "おねだり Shall We 〜?"}

という Hash になります。

JSON から Hash に変換するには

API などから受け取った JSON を Hash に変換するには JSON.parse を使います。これは標準添付ライブラリの中に入っているので、 require "JSON" とするだけで使えるようになります。

例えば str の中に JSON の文字列が入っているとして hash = JSON.parse(str) とすると、その JSON に対応した Hash が hash に入ります。

実践的な注意点

今まで簡単な Hash しか使ってこなかったため意識する必要はありませんでしたが、 JSON も Hash も入れ子になり得る ということを覚えておいてください。 つまり、Hash の返り値がまた Hash になってもよいということです。 しかし、臆することはなくて、 2 次元配列のようにアクセス すればよろしいです。 一応サンプルを示しておきましょう。

lovelaika = {
  "minami" => {
    "name" => "Minami Nitta",
    "age" => 19,
    "song" => "ヴィーナスシンドローム"
  },
  "anya" => {
    "name" => "Anastasia",
    "age" => 15,
    "song" => "You're stars shine on me"
  }
}

puts lovelaika["anya"]["name"] # Anastasia と出力される。

ナビゲーション

この教材は、東京大学理学部数学科専門科目「計算数学 I」のために執筆されたものです。 このサイトに掲載する際に、記事を分けてあります。 他の回はRuby 天気予報編 一覧 #ks1-ruby-forecastから御覧ください。

Ruby 入門 (計算数学実習資料集)には他の TA が書いた教材があります。

コメントする