zoukankan      html  css  js  c++  java
  • Android-网页解析-gson的使用

    相对于较为传统的Json解析来说,google共享的开源Gson在解析速度和所使用的内存在有着明显的优势,虽然说阿里巴巴也提供了fastgson包,但是它跟Gson的处理速度大同小异,只是底层实现的原理不同,在这里就来学习一下怎么使用google的开源包Gson(在学习之间你应该下载好google gson包)

           Gson的解析非常简单,但是它的解析规则是必须有一个bean文件,这个bean文件的内容跟JSon数据类型是一一对应的

    public class user {
    private String name;
    private int age;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    public user(String name, int age) {
    super();
    this.name = name;
    this.age = age;
    }

    Gson有两个重要的方法,一个就是tojson,一个就是fromjson。

    tojson就是将bean里面的内容转换为json内容

    user u=new user("zhangsan",19);

    Gson g=new Gson();
    System.out.println(g.toJson(l));

    //打印结果是{"name":"zhangsan","age":19}

    当然它还可以承担一些复杂的操作,比如通过集合插入一组数据

    List<user> l=new LinkedList<user>();
      user u=new user("zhangsan",19);
      l.add(u);
      user u2=new user("zhangsan2",19);
      l.add(u2);
      Gson g=new Gson();
      System.out.println(g.toJson(l));

    //打印结果是[{"name":"zhangsan","age":19},{"name":"zhangsan2","age":19}]

    //注意,对于Json而言,【】代表数组,{}代表一个对象

    当然它还可以实现更复杂的对象,在一个Json对象中再嵌套一个Json对象,因为涉及到要更改user内容,这边就不演示了

    2、fromjson,从我们的Json对象封装出一个一个的bean对象

     user u=new user();
         Gson g=new Gson();
         u=g.fromJson("{name:'zhangsan',age:12}", user.class);

       System.out.println(u.getName()+"      "+u.getAge());

    //打印结果是zhangsan   12

    如果你的Json里面不止一个对象,那么你就得使用一个集合来装,我们这里模拟一个list来装的例子,在使用list装的过程中我们会使用到一个工具类,typeToken,通过它我们可以获取一个泛型的数据类型,使用方法十分简单,TypeToken(泛型)(){}.gettype()即可,返回一个type类型,这就是fromjson所需要的type类型,来自于reflect包

      user u=new user();
      Gson g=new Gson();
      String s="[{name:'zhangsan',age:12},{name:'lisi',age:12}]";
      Type lt=new TypeToken<List<user>>(){}.getType();
      List<user> l=g.fromJson(s,lt);
      for(user u1:l){
          System.out.println(u1.getName()+"      "+u1.getAge());
      }

    //打印结果是zhangsan 12

    //lisi 12

     

     

     

     

    下面用个例子,简单的介绍gson如何解析json,仅使用~

     先发两个json 内容 

    1、最外层是{}

        {    
            "resp": "ok",
            "result": {
                "date": "2013-4-19 16:55:58",
                "focus": [
                    {
                        "summary": "简介",
                        "title": "标题",
                        "url": "http://www.ceshi.com"
                    },
                    {
                        "summary": "简介22",
                        "title": "标题22",
                        "url": "http://www.ceshi22.com"
                    }
                ],
                "items": [
                    {
                        "id": "11",
                        "name": "名称",
                        "price": "88.88"
                    },
                    {
                        "id": "22",
                        "name": "名称22",
                        "price": "100"
                    }
                ]
            }    
        }


    2、外层是[]

        [    
            {
                "addr": "北京",
                "age": "22",
                "name": "zeng"
            },
            {
                "addr": "上海",
                "age": "20",
                "name": "zhang"
            },
            {
                "addr": "深圳",
                "age": "25",
                "name": "wang"
            }    
        ]

    ###**一、使用Gson,解析,关键的就是定义好JavaBean类对象**

    1、***定义{}类型的JavaBean类***

    Bean.java

        public class Bean {  //若实现Serializable接口,则不用写下面的SerializedName("字段名"),但成员变量名称必须与json中一样
        //  @SerializedName("resp")  
        //  private String respone;//假如变量命名与解析数据不同,则加上@SerializedName("")  
        private String resp;  
        private Result result;  
        //....下面省略 set ,get  

    //resultBean类

    Result.java
     

        public class Result {    
            private String date;  
            private List<FocusItem> focus;  
            private List<Item> items;  
        }
    FocusItem.java

        public class FocusItem {        
            private String title;  
            private String summary;  
            private String url;  
        }
    Item.java

        public class Item {            
            private String name;  
            private int id;  
            private float price; 
        } 

     2、***定义{}类型的JavaBean类***

      Info.java

        public class Info {    
            private String name;  
            private int age;  
            private String addr; 
        } 


    ###**二、解析代码,一个最外层是{}  一个是[]**


        private void parse() {  
            Gson gson = new Gson();  
            switch (type) { 
            //最外层是{},封装为一个对象
            case OBJ:  
                Bean fromJson = gson.fromJson(readContent, Bean.class);  
                System.out.println(fromJson.toString());  
                break;  
            //最外层是[],封装为一个数组对象
            case ARR:  
                Type type = new TypeToken<List<Info>>() {}.getType();  
                Object fromJson2 = gson.fromJson(readContent, type);  
                List<Info> list = (List<Info>) fromJson2; 
                break; 
            }
        }

  • 相关阅读:
    Python+Selenium自动化总结
    Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法
    Python+Selenium自动化-模拟键盘操作
    【leetcode】1053. Previous Permutation With One Swap
    【leetcode】1052. Grumpy Bookstore Owner
    【leetcode】1034. Coloring A Border
    【leetcode】1042. Flower Planting With No Adjacent
    【leetcode】1035. Uncrossed Lines
    【leetcode】1048. Longest String Chain
    【leetcode】1047. Remove All Adjacent Duplicates In String
  • 原文地址:https://www.cnblogs.com/laijinquan/p/6546098.html
Copyright © 2011-2022 走看看