這陣子在使用gson解析時遇到了點小麻煩,因為一直用的fastjson,最近一個項目里使用的gson,需要解析list集合,查資料都是使用TypeToken解決,相對比較麻煩,下面為大伙推薦一種簡便的方法。
<Object> Object com.google.gson.Gson.fromJson(String json, Class<Object> classOfT) throws JsonSyntaxException 可以方便地幫我們把Json字符串轉換成對應類型的對象。這里提供一個簡單的例子,幫助大家理解。
Json字符串
{response: "success", demoList: [{id: "1", name: "jack", age: "21"},{id: "2", name: "joke", age: "22"},{id: "3", name: "pink", age: "23"}]}
Demo.java
public class Demo { private String id; private String name; private int age; }
如果要解析出來Demo的List,我們該怎么做呢?一般朋友查到網上的資料都是使用TypeToken的方法。
T com.google.gson.Gson.fromJson(String json, Class<T> classOfT) throws JsonSyntaxException
這個方法用起稍微有那么一點復雜,不過對於這個例子還不是很復雜,既然還是復雜,那就不討論它了,這不是這兒的重點。
重點說說后面的方法:Gson.fromJson(String json, Class<Object> classOfT),因為我們需要Demo的集合,所以就封裝一個DemoList類,用這個類接收fromJson()返回的結果,如下:
DemoList.java
public class DemoList {
private List<Demo> demoList;
public List<Demo> getDemoList() {
return demoList;
}
public void setDemoList(List<Demo> demoList) {
this.demoList = demoList;
}
}
接下來,在解析時候就可以一行代碼搞定整個Json的反序列化操作,這時候才真正看到了Gson的強大之處,但值得注意的就是DemoList中紅色的成員變量,它的名字應該是和Json字符串中集合的鍵是對應的,我就是因為不知道這點讓我飽經磨難。
DemoList demo = new Gson().fromJson(json,DemoList.class);
List<Demo> list = demo.getDemoList();
是不是相當簡單,不用fastJson一樣,一級一級剝開了再處理,還要處理異常,但是個人還是感覺fastJson比較容易理解些,反正各有長短吧,以上純屬個人見解,大家習慣用誰誰,只希望能幫到遇到和我一樣情況的朋友們。