Weather HacksのJSONを変換

スポンサーリンク

こんにちは。「Javaを復習する初心者」です。

今回は「Weather Hacks – livedoor 天気情報」からJSONを取得し、gsonというライブラリでJavaオブジェクトに変換してみました。ただし、変換先のjavaファイルは自作です。記事の内容はこのjavaファイルをどうやって作っていったかという話です。

スポンサーリンク

JSONの説明

JSONとはJavaScript Object Notationの略でデータの表記法のひとつです。例えばJavaでint型配列の初期化に{1, 2, 3}などと書く文法がありますが、そのような記法を発展させたようなものです。JSONの細かい説明は今のところ省きます。一番単純な例は以下です。

キーと値
{ "キー": 値 }

クラスを作る

以下のページに「お天気Webサービス仕様」が載っています。

livedoor 天気情報 - 全国の天気 全国の天気概況 1月16日18時0分発表 日本の南海上を低気圧が発達しながら東に進む見込みです 沖縄は雲が広がり雨や雷雨の所がありそうです 九州と四国は昼過ぎまで雨や雪が降るでしょう 中国と近畿は昼頃から雨や雪の降る所が多い見込みです 東海と関東も夕方から雨が降り出し、山沿いでは雪で積もる所がありそうです 北陸は朝晩に雪や雨が降るでしょう 東北と北海道は日本海側を中心に雪が降る見込みです
今日・明日・週間の天気予報、台風・地震・津波・火山など、気象・防災情報が満載。

「リクエストパラメータ」と「レスポンスフィールド」という項目に定義が記載してあります。定義に従ったリクエストを送るとJSON形式で情報が返却されます。

「レスポンスフィールド」のJSONデータサンプルを見て、javaファイルを作っていきました。JSONデータの一番上の方に注目します。

JSONデータサンプル抜粋
{
   "publicTime" : "2013-01-29T11:00:00+0900",
   "title" : "福岡県 久留米 の天気",
	・
	・
	・
}

キーと値のペアがカンマで区切られています。これを変換用のJavaファイルに直すと例えば以下になります。

WeatherHacks.java
public class WeatherHacks {

    public String publicTime;
    public String title;

}

上記のようにJavaのクラスにString型変数を定義し、キーを変数名に記述していくという作業になるのですが、単純な構造ではないので工夫が必要です。次の箇所はdescriptionというキーですが、「description」に対して、キーとデータのペアが対応しています。

JSONデータサンプル抜粋
{
	・
	・
	・
   "description" : {
      "text" : " 九州北部地方は、高気圧に覆われて晴れています。\n\n 29日は、九州北部地方では、高気圧に覆われて晴れますが、気圧の谷の\n影響で、昼過ぎから次第に曇りとなるでしょう。\n\n 30日は、気圧の谷の影響ではじめ曇りますが、昼頃からは高気圧に覆わ\nれて概ね晴れるでしょう。\n\n 波の高さは、九州北部地方の沿岸の海域では、29日は1.5メートル、\n30日は1メートルでしょう。豊後水道では、29日と30日は1メートル\nでしょう。\n 福岡県の内海では、29日と30日は0.5メートルでしょう。",
      "publicTime" : "2013-01-29T10:37:00+0900"
   },
	・
	・
	・
}

descriptionというキーに対応するデータがさらにキーとデータのペアを持っています。なので新しくDescriptionクラスを作成します。

Description.java
public class Description {

    public String text;
    public String publicTime;

}

WeatherHacksクラスにはDescription型変数を定義します。変数名はキー名と一致させます。

WeatherHacks.java
public class WeatherHacks {

    public String publicTime;
    public String title;
    public Description description;

}

上記のようにキーに対応するデータが中括弧で囲まれていた場合、適宜クラスを作っていきます。

以下の箇所は鍵括弧で囲まれています。これは配列です。

JSONデータサンプル抜粋
{
	・
	・
	・
   "pinpointLocations" : [
      {
         "link" : "http://weather.livedoor.com/area/forecast/4020200",
         "name" : "大牟田市"
      },
	・
	・
	・
}

なのでWeatherHacksクラスに定義する変数も以下のように配列にします。

WeatherHacks.java
package weather_hacks_json;

import weather_hacks_json.child.Description;
import weather_hacks_json.child.Forecasts;
import weather_hacks_json.child.Location;
import weather_hacks_json.child.PinpointLocations;
import weather_hacks_json.child.child.Copyright;

public class WeatherHacks {

	・
	・
	・
    public Forecasts[] forecasts;
	・
	・
	・

}

GitHubで公開中

作ったjavaファイルは以下のGitHubで公開しています。

GitHub - java-beginner/class-for-weather-hacks-json: weather hacksのJSONデータを受け取るためのオブジェクト

例えばgsonライブラリでWeatherHacksクラスのインスタンスに値を格納することができます。String型変数jsonにJSON文字列が格納されている場合、次のように記述することでWeatherHacksクラスに変換ができます。

変換サンプル
        WeatherHacks weatherHacks = new Gson().fromJson(json, WeatherHacks.class);

上記にtestパッケージのTest.javaが格納してあり、これで動作確認ができます。東京の天気を取得するテストです。gsonライブラリを使って、JSONをJavaのオブジェクトに変換しています。さらにそれをJSON形式のテキストに直し、コンソール出力をさせています。

タイトルとURLをコピーしました