SQLの窓

2015年05月05日


Java : Google gson 2.3.1 で JSON 文字列を定義済みのクラスを使ってオブジェクト化

処理としては、以下の記事の続きになります。

Eclipse + JFace : HttpURLConnection で GET

※ Google gson のダウンロードはこちら
※ Google gson の実装はこちら
※ オンラインドキュメントはこちら

まずは、JSON データとして WEB API を

Livedoor の お天気Webサービスを使用します。地域id を指定するだけで、その地域の天気データを取得できる API です。

▼ 大阪
http://weather.livedoor.com/forecast/webservice/json/v1?city=270000

JSON のチェックと整形は JSONLint サービスでどうぞ


Google gson 用のクラス定義

JSON のフォーマットに合わせて定義しますが、順序を合わす必要は無く、名前(変数名)を一致させるようにします。サンプルでは、文字列と整数を使っていますが、JsonElement で可能な変換はできると思います。

Getter と Setter でアプリケーションに必要な変換をそこで定義してしまってもいいと思います。

public class Weather {

	class PinpointLocation {
		String link;
		String name;
	}

	class Text {
		String text;
		String publicTime;
	}

	class Location {
		String city;
		String area;
		String prefecture;
	}

	class IntTest {
		ImageSize image;
	}

	class ImageSize {
		int width;
		int height;
	}

	PinpointLocation[] pinpointLocations;
	Location location;
	IntTest copyright;
	Text description;

	// Getter と Setter で処理する
	private String publicTime;

	String getPublicTime() {
		return publicTime.substring(0, 10);
	}
	void setPublicTime(String publicTime) {
		this.publicTime = publicTime;
	}

}


実行
	/**
	 * Create contents of the application window.
	 * @param parent
	 */
	@Override
	protected Control createContents(Composite parent) {
		Composite container = new Composite(parent, SWT.NONE);
		container.setLayout(null);
		{
			Button btnNewButton = new Button(container, SWT.NONE);
			btnNewButton.addSelectionListener(new SelectionAdapter() {
				@Override
				public void widgetSelected(SelectionEvent e) {
					System.out.println("ボタンの処理");
					HttpGet hg = new HttpGet();
					String result =
						hg.execute(
							"http://weather.livedoor.com/forecast/webservice/json/v1?city=270000",
							"utf-8"
							);
					System.out.println(result);

					Gson gson = new Gson();
					Weather json = gson.fromJson(result,Weather.class);

					// 内部クラスの変数として定義されたものをそのまま利用
					System.out.println(json.location.city);
					System.out.println(json.location.area);
					System.out.println(json.location.prefecture);
					System.out.println(json.description.text);
					System.out.println(json.description.publicTime);

					// Setter でセットされたものを Getter で取得
					System.out.println(json.getPublicTime());

					// クラスの配列として定義していたものを使用
					for( int i = 0; i < json.pinpointLocations.length; i++ ) {
						System.out.println(json.pinpointLocations[i].link);
						System.out.println(json.pinpointLocations[i].name);
					}

					// 数値変数
					System.out.println(json.copyright.image.width);
					System.out.println(json.copyright.image.height);

				}
			});
			btnNewButton.setBounds(10, 10, 81, 28);
			btnNewButton.setText("New Button");
		}

		return container;
	}



タグ:java JSON
【Javaの最新記事】
posted by lightbox at 2015-05-05 07:15 | Java | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり