久しぶりに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 件のコメント:
コメントを投稿