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

     

  • 相关阅读:
    Redis缓存穿透
    如何应对缓存穿透和缓存雪崩问题
    Redis缓存雪崩
    redis缓存机制
    C# LINQ学习笔记三:LINQ to OBJECT之操作字符串
    C# LINQ学习笔记二:LINQ标准查询操作概述
    C# LINQ学习笔记一:走进LINQ的世界
    C# Lambda表达式学习笔记
    C#委托与事件学习笔记
    C#泛型学习笔记
  • 原文地址:https://www.cnblogs.com/huolongluo/p/5545049.html
Copyright © 2011-2022 走看看