目前的客戶端大都有和服務端進行交互,而數據的格式基本就是json了,因而在Android開發中就常常用到json解析,方便的是Google已經爲咱們提供了一個很棒的json解析庫–gson,那麼今天就來總結分享下gson的各類用法。html
gson的官方下載地址:google-gsonjava
單個對象
首先咱們來看一個最簡單的用法,假設json的數據格式是這樣的:android
{ "id": 100, "body": "It is my post", "number": 0.13, "created_at": "2014-05-22 19:12:38" }
那麼咱們只須要定義對應的一個類:git
public class Foo { public int id; public String body; public float number; public String created_at; }
使用起來只需以下幾行代碼就好了:github
public static final String JSON_DATA = "..."; Foo foo = new Gson().fromJson(JSON, 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了:json
public class Foo { public int id; public String body; public float number; @SerializedName("created_at") public String createdAt; }
而後用法不變,是否是很方便。數組
對象的嵌套
假設要返回以下數據:ruby
{ "id": 100, "body": "It is my post", "number": 0.13, "created_at": "2014-05-22 19:12:38" "foo2": { "id": 200, "name": "haha" } }
那麼對象的定義是這樣的post
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" }]
這種解析有兩種方法:
- 一、解析成數組
public static final String JSON_DATA = "..."; Foo[] foos = new Gson().fromJson(JSON_DATA, Foo[].class); // 這時候想轉成List的話調用以下方法 // List<Foo> foosList = Arrays.asList(foos);
- 二、解析成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沒有怎麼研究,之後有時間使用體驗一下。