久しぶりにJavaの仕事。
JSONを処理するにあたってGsonというライブラリを使ったのでメモ。
Gson
そもそもGoogle社内で開発・利用していたものを、一般に公開したとのこと。
google-gson - A Java library to convert JSON to Java objects and vice-versa - Google Project Hosting から現在の最新版である google-gson-1.7.1-release.zip をダウンロードし、コンパイル&実行に必要な gson-1.7.1.jar を抽出しておく。
JSONのパース/シリアライズ
Gsonクラスをインスタンス化して、インスタンスメソッドである fromJson(), toJson() でそれぞれパース、シリアライズを行う。
JSONオブジェクトのキーがJavaの予約語と一致してしまう場合、つまり {"try":1, "class":2} のような場合、そのままではパースができないためアノテーション @SerializedName を使って対応する必要がある。
サンプルコード
Gsonを使ってパースとシリアライズを行う。パースするJSONは {"class":999} でキーにJavaの予約語"class"を含むため、@SerializedName を使ってJavaオブジェクトのフィールド_class と対応させる。
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
public class Test{
// JSONに対応するクラス。フィールド1個だけ。
private class Myobj {
// _classフィールド
// 対応するJSONのキーがJava予約語(class)なのでアノテーションを付ける
@SerializedName ("class") private int _class;
// toString()
public String toString() {
return "_class: " + this._class;
}
}
// main
public static void main (String[] args) {
// JSON
String json = "{\"class\":999}";
// JSONをパース
Gson gson = new Gson();
Myobj myo = gson.fromJson(json, Myobj.class);
System.out.println("fromJson: " + myo);
// Javaオブジェクトをシリアライズ
String s = gson.toJson(myo);
System.out.println("toJson: " + s);
}
}
コンパイル&実行結果。ちなみに環境は Mac OS X 10.6.8 (Darwin 10.8.0 x86_64)。
$ javac -classpath gson-1.7.1.jar Test.java
$ java -classpath ./:gson-1.7.1.jar Test
fromJson: _class: 999
toJson: {"class":999}
0 件のコメント:
コメントを投稿