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; 
        }
    }

 

posted @ 2017-03-14 01:50  1O(∩_∩)O1  阅读(308)  评论(0编辑  收藏  举报