AndroidでGson使用


現在のクライアントの多くはサービス側と対話しているが、データのフォーマットは基本的にjsonであるため、Android開発ではjson解析がよく使われている.便利なのはGoogleが素晴らしいjson解析ライブラリであるgsonを提供してくれたことだ.では、今日はgsonの様々な使い方をまとめてみよう.
gsonの公式ダウンロードアドレス:google-gson
単一オブジェクト
まず、jsonのデータフォーマットが次のようになると仮定する最も簡単な使い方を見てみましょう.
{
    "id": 100,
    "body": "It is my post",
    "number": 0.13,
    "created_at": "2014-05-22 19:12:38"
}

では、対応するクラスを定義するだけです.
public class Foo {
    public int id;
    public String body;
    public float number;
    public String created_at;
}

使用するには、次の数行のコードだけでいいです.
public static final String JSON_DATA = "...";
Foo foo = new Gson().fromJson(JSON_DATA, Foo.class);

ここが一番簡単な使い方ですatはStringタイプを直接定義し、Dateタイプを望む場合は次の例になります.
public class Foo {
    public int id;
    public String body;
    public float number;
    public Date created_at;
}

public static final String JSON_DATA = "...";
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss");
Gson gson = gsonBuilder.create();
Foo foo = gson.fromJson(JSON_DATA, Foo.class);

誰かが言ったatはjavaスタイルではありません.javaプログラミング規範はアルパカ構造です.ok、Gsonは人間的に注釈を提供しています.Fooオブジェクトをこのように変更するだけでokです.
public class Foo {
    public int id;
    public String body;
    public float number;

    @SerializedName("created_at")
    public String createdAt;
}

それから使い方が変わらないので、便利ではないでしょうか.
オブジェクトのネスト
次のデータを返すとします.
{
    "id": 100,
    "body": "It is my post",
    "number": 0.13,
    "created_at": "2014-05-22 19:12:38"
    "foo2": {
        "id": 200,
        "name": "haha"
    }
}

オブジェクトの定義はこうです
public class Foo {
    public int id;
    public String body;
    public float number;
    public String created_at;
    public ChildFoo foo2;

    public class ChildFoo {
        public int id;
        public String name;
    }
}

オブジェクト配列
json配列を返すと、次のようになります.
[{
    "id": 100,
    "body": "It is my post1",
    "number": 0.13,
    "created_at": "2014-05-20 19:12:38"
},
{
    "id": 101,
    "body": "It is my post2",
    "number": 0.14,
    "created_at": "2014-05-22 19:12:38"
}]

この解析には2つの方法があります.
1、配列に解析する
public static final String JSON_DATA = "...";
Foo[] foos = new Gson().fromJson(JSON_DATA, Foo[].class);
//       List        
// List<Foo> foosList = Arrays.asList(foos);

2、List に解析する
public static final String JSON_DATA = "...";
Type listType = new TypeToken<ArrayList<Foo>>(){}.getType();
ArrayList<Foo> foos = new Gson().fromJson(JSON_DATA, listType);

まとめ
開発でよく使われる集中型について基本的にまとめましたが、使い方は簡単で便利で、主にjsonデータを対応するデータモデルに抽象化する必要があるのでokです.しかし、アリにも独自のオープンソースjson解析ライブラリ-FastJsonがあり、性能はもっと良いと言われていますが、実際の応用ではGsonの解析がかなり速く、Google公式のものを使うのに慣れているような気がしますので、FastJsonについてはあまり研究していません.後で使う時間があれば体験してみてください.
原文住所:http://stormzhang.com/android/2014/05/22/android-gson/