Think Twice

Memorandum

Gson使ってみた

androidで株価ウィジェットを作る前にjavaYQLを使ってみる。
前に…
返却されるデータをjsonで扱いたいので、Gson(https://code.google.com/p/google-gson/)を使ってみた。

Gson使いやすい!!

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AAPL%22,%22VTI%22)&format=json&env=store://datatables.org/alltableswithkeys

このjson
Root
 └Query
   ├─count
   ├─created
   ├─lang
   └─Results
      └─List<Quote>
こんなオブジェクトに簡単に変換できる。(逆も簡単!)

Gsonの使用例(json=>オブジェクト)

try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("json.txt"))));) {
    Gson gson = new Gson();
    Root root = gson.fromJson(reader, Root.class);
}

Rootクラス

public class Root {
	private Query query;

	public Root(Query query) {
		super();
		this.query = query;
	}

	public Query getQuery() {
		return query;
	}

	public void setQuery(Query query) {
		this.query = query;
	}
}

Queryクラス

public class Query {
	private String count;
	private String created;
	private String lang;
	private Results results;
//以下略

Resultsクラス

public class Results {
	private List<Quote> quote;

	public Results(List<Quote> quote) {
		super();
		this.quote = quote;
	}

	public List<Quote> getQuote() {
		return quote;
	}

	public void setQuotes(List<Quote> quote) {
		this.quote = quote;
	}

}

Quoteクラス

public class Quote {
	private String Ask;
	private String AverageDailyVolume;
	private String Bid;
//以下略

1つ、躓いたところ。
Listの名前をいつもの癖で複数形に無意識でしていたら
jsonの名前と一致せずにうまくデシリアライズできなかった。
jsonに名前をそろえて解決。