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);

這裏是最簡單的用法,created_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);

有人說created_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"
}]

這種解析有兩種方法:

  • 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沒有怎麼研究,以後有時間使用體驗一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章