zoukankan      html  css  js  c++  java
  • 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数据:

    {
        "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文件

     

    需要注意的是:

         1:内部嵌套的类必须是static修饰的;

         2:类里面的属性名必须跟Json字段里面的key是一样的。

     

    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的文档。

     

  • 相关阅读:
    luogu P1833 樱花 看成混合背包
    luogu P1077 摆花 基础记数dp
    luogu P1095 守望者的逃离 经典dp
    Even Subset Sum Problem CodeForces
    Maximum White Subtree CodeForces
    Sleeping Schedule CodeForces
    Bombs CodeForces
    病毒侵袭持续中 HDU
    病毒侵袭 HDU
    Educational Codeforces Round 35 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/huolongluo/p/5545049.html
Copyright © 2011-2022 走看看