Gson解析Json数据

 json解析我们不陌生了,不过每次编写解析的代码时总是很头疼,一堆很无聊的代码,如果有50个接口那就得写50个相似的解析处理。其实谷歌和阿里很早就推出了解析json的工具包,谷歌的Gson,阿里的FastJson,还有一个jackJson。有人说jackJson解析速度快,大数据时FastJson要比Gson效率高,小数据时反之。不过我还是偏爱谷歌的Gson,即使效率可能偏低,但是稳定性肯定没得说,FastJson和jackJson就不知道了。

     现在我们来看看Json是如何解析的:

1.下载Gson开发包,放入工程libs目录下:

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

2.编写Bean文件:

先看一下json数据:

[html]  view plain copy print ?
  1. {  
  2.     "array": [     
  3.         {  
  4.             "username": "在中",   
  5.             "recommend": 0,   
  6.             "user_photo": "0",   
  7.             "like": false,   
  8.             "reply_cnt": 3,   
  9.             "distance": "2154m",   
  10.             "add_date": "3天前",   
  11.             "text": "肯德基快吃吐了,明天去麦当劳看看",   
  12.             "stamp__name": null,   
  13.             "place_id": 1,   
  14.             "ptype": "d",   
  15.             "like_cnt": "2",   
  16.             "posting_image_url": "1",   
  17.             "stamp_name": null,   
  18.             "user": 0,   
  19.             "stamp__id": null,   
  20.             "dislike": "0",   
  21.             "icon": "cate_icon_a_09",   
  22.             "id": 0,   
  23.             "mayor_cnt": 2,   
  24.             "place_name": "东大桥肯德基",  
  25.         "place_level": 2  
  26.         },   
  27.         {  
  28.             "username": "在中",   
  29.             "recommend": 0,   
  30.             "user_photo": "0",   
  31.             "like": false,   
  32.               "reply_cnt": 0,   
  33.             "distance": "2425m",   
  34.             "add_date": "3天前",   
  35.             "text": "这是在跳僵尸舞呢吗?",   
  36.             "stamp__name": null,   
  37.             "place_id": 7,   
  38.             "ptype": "d",   
  39.             "like_cnt": "0",   
  40.             "posting_image_url": "0",   
  41.             "stamp_name": null,   
  42.             "user": 0,   
  43.             "stamp__id": null,   
  44.             "dislike": "0",   
  45.             "icon": "cate_icon_b_05",   
  46.             "id": 4,   
  47.             "mayor_cnt": 2,   
  48.             "place_name": "悠唐",  
  49.         "place_level": 1  
  50.         }   
  51.     ],   
  52.     "error": 0,   
  53.     "next": true  
  54. }  
        

紧接着,我们创建bean文件

需要注意的是:

   1、内部嵌套的类必须是static修饰的;
   2、类里面的属性名必须跟Json字段里面的Key是一样的;


NearDynamic.java:

[java]  view plain copy print ?
  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:

[java]  view plain copy print ?
  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解析数据:

[java]  view plain copy print ?
  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文件中数据,再按照上面所讲的就可以了:

[java]  view plain copy print ?
  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的文档。

你可能感兴趣的:(Gson解析Json数据)