Gson解析json數據

 json解析咱們不陌生了,不過每次編寫解析的代碼時老是很頭疼,一堆很無聊的代碼,若是有50個接口那就得寫50個類似的解析處理。其實谷歌和阿里很早就推出瞭解析json的工具包,谷歌的Gson,阿里的FastJson,還有一個jackJson。有人說jackJson解析速度快,大數據時FastJson要比Gson效率高,小數據時反之。不過我仍是偏心谷歌的Gson,即便效率可能偏低,可是穩定性確定沒得說,FastJson和jackJson就不知道了。java

     如今咱們來看看Json是如何解析的:
web

1.下載Gson開發包,放入工程libs目錄下:json

http://download.csdn.net/detail/itachi85/8617065工具

2.編寫Bean文件:post

先看一下json數據:測試

{
    "array": [   
        {
            "username": "在中", 
            "recommend": 0, 
            "user_photo": "0", 
            "like": false, 
            "reply_cnt": 3, 
            "distance": "2154m", 
            "add_date": "3天前", 
            "text": "肯德基快吃吐了,明天去麥當勞看看", 
            "stamp__name": null, 
            "place_id": 1, 
            "ptype": "d", 
            "like_cnt": "2", 
            "posting_image_url": "1", 
            "stamp_name": null, 
            "user": 0, 
            "stamp__id": null, 
            "dislike": "0", 
            "icon": "cate_icon_a_09", 
            "id": 0, 
            "mayor_cnt": 2, 
            "place_name": "東大橋肯德基",
        "place_level": 2
        }, 
        {
            "username": "在中", 
            "recommend": 0, 
            "user_photo": "0", 
            "like": false, 
              "reply_cnt": 0, 
            "distance": "2425m", 
            "add_date": "3天前", 
            "text": "這是在跳殭屍舞呢嗎?", 
            "stamp__name": null, 
            "place_id": 7, 
            "ptype": "d", 
            "like_cnt": "0", 
            "posting_image_url": "0", 
            "stamp_name": null, 
            "user": 0, 
            "stamp__id": null, 
            "dislike": "0", 
            "icon": "cate_icon_b_05", 
            "id": 4, 
            "mayor_cnt": 2, 
            "place_name": "悠唐",
        "place_level": 1
        } 
    ], 
    "error": 0, 
    "next": true
}

 

 

緊接着,咱們建立bean文件大數據

 

須要注意的是:this

     1:內部嵌套的類必須是static修飾的;url

     2:類裏面的屬性名必須跟Json字段裏面的key是同樣的。spa

 

NearDynamic.java:

 1 public class NearDynamic {
 2     private Boolean next=false;
 3     private  int error;
 4     private ArrayList<Dynamic> array = new ArrayList<Dynamic>();
 5     public Boolean getNext() {
 6         return next;
 7     }
 8     public void setNext(Boolean next) {
 9         this.next = next;
10     }
11     public int getError() {
12         return error;
13     }
14     public void setError(int error) {
15         this.error = error;
16     }
17     public ArrayList<DynamicJ> getArray() {
18         return array;
19     }
20     public void setArray(ArrayList<DynamicJ> array) {
21         this.array = array;
22     }
23 }

 

上面包含了error,next字段,以及包含類型是Dynamic的List,接着咱們建立Dynamic:

 1 public class Dynamic {
 2     private String username;
 3     private int recommend;
 4     private String user_photo;
 5     private Boolean like;
 6     private int replycnt;
 7     private String distance;
 8     private String add_date;
 9     private String text;
10     private String stamp__name;
11     private int place_id;
12     private int like_cnt; 
13     private String ptype;    
14     private String posting_image_url;
15     private String stamp_name;
16     private int user;
17     private String stamp__id;
18     private int dislike=0;
19     private String icon;
20     private int id;
21     private String place_name;
22     private int place_level;
23     private String mayor_cnt;
24     public String getStamp__name() {
25         return stamp__name;
26     }
27     public void setStamp__name(String stamp__name) {
28         this.stamp__name = stamp__name;
29     }
30     public int getLike_cnt() {
31         return like_cnt;
32     }
33     public void setLike_cnt(int like_cnt) {
34         this.like_cnt = like_cnt;
35     }
36     public String getStamp_name() {
37         return stamp_name;
38     }
39     public void setStamp_name(String stamp_name) {
40         this.stamp_name = stamp_name;
41     }
42     public String getStamp__id() {
43         return stamp__id;
44     }
45     public void setStamp__id(String stamp__id) {
46         this.stamp__id = stamp__id;
47     }
48     public int getDislike() {
49         return dislike;
50     }
51     public void setDislike(int dislike) {
52         this.dislike = dislike;
53     }
54     public String getMayor_cnt() {
55         return mayor_cnt;
56     }
57     public void setMayor_cnt(String mayor_cnt) {
58         this.mayor_cnt = mayor_cnt;
59     }
60     public int getId() {
61         return id;
62     }
63     public void setId(int id) {
64         this.id = id;
65     }
66     public int getUser() {
67         return user;
68     }
69     public void setUser(int user) {
70         this.user = user;
71     }
72     public String getUsername() {
73         return username;
74     }
75     ...    
76 }

 

 

3.使用Gson解析數據:

 1 private int parseUserData() {
 2          String strContent = Utils.getJson("neardynamic.txt");
 3         if (!TextUtils.isEmpty(strContent)) {
 4             try {
 5                 Gson mgson = new Gson();
 6                 NearDynamic mNearDynamic = mgson.fromJson(
 7                         strContent, NearDynamic.class);
 8                 ArrayList<Dynamic> mNearDynamicList = mNearDynamic
 9                         .getArray();
10                 LogController.i(mNearDynamicList.get(1).getUsername());
11                 return BaseEngine.RESULT_OK;
12             } catch (Exception e) {
13                 e.printStackTrace();
14                 return BaseEngine.PARSEJSON_ERR;
15             }
16         }
17         return BaseEngine.RESULT_ERR;
18     }

上面代碼是一個解析的方法:直接從txt文件中讀取數據由Json解析,首先由Json生成NearDynamic,而後獲得array中的列表數據,咱們取第二個數據打下log,得出的結果是"在中",解析完畢。
若是想要快速測試的話,就寫一個txt文件,裏面寫有json數據,放入assets文件中,而後用下面的方法讀取txt文件中數據,再按照上面所講的就能夠了:

 1 public static String getJson(String filename) {
 2         InputStream mInputStream = null;
 3         String resultString = "";
 4         try {
 5             mInputStream = App.mContext.getAssets().open(filename);
 6             byte[] buffer = new byte[mInputStream.available()];
 7             mInputStream.read(buffer);
 8             resultString = new String(buffer, "GB2312");
 9         } catch (IOException e) {
10             // TODO Auto-generated catch block
11             e.printStackTrace();
12         } finally {
13             try {
14                 mInputStream.close();
15             } catch (IOException e) {
16                 // TODO Auto-generated catch block
17                 e.printStackTrace();
18             }
19         }
20         return resultString.toString();
21     }

 

想要了解Gson更多的方法能夠下載http://download.csdn.net/detail/itachi85/8617065中的文件,裏面有Gson的文檔。

相關文章
相關標籤/搜索