2011年8月7日日曜日

JavaでJSONのパース/シリアライズ - Gson

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

コメントを投稿