相对于较为传统的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; 
        }
    }

Android-网页解析-gson的使用的更多相关文章

  1. Android JSON、GSON、FastJson的封装与解析

    声明: 1.本帖只提供代码,不深入讲解原理.如果读者想要深入了解,那就不要在这个帖子上浪费时间了 2.客户端用的是Google官方的Volley访问服务器,具体了解Volley请戳 这里 3.本帖三种 ...

  2. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  3. Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

    Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...

  4. Android中使用Gson解析JSON数据

      Android中使用Gson解析JSON数据 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list ...

  5. Android Studio下的简单网页解析

    Android Studio下的简单网页解析 一.导入数据 导入前添加依赖 implementation 'org.jsoup:jsoup:1.11.3' 使用字符串导入 String html = ...

  6. Android Volley和Gson实现网络数据加载

    Android Volley和Gson实现网络数据加载 先看接口 1 升级接口 http://s.meibeike.com/mcloud/ota/cloudService POST请求 参数列表如下 ...

  7. 1.Android中解析json程序代码

    Android程序解析json数据可以通过gson的方式,这种情况需要导入相应的jar包.测试代码如下: @Override protected void onCreate(Bundle savedI ...

  8. Android数据解析-JSON解析

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,基于JavaScript(Standard ECMA-262 3rd Edition - December ...

  9. Android网页浏览器的开发

    Android网页浏览器的核心Widget是包含了WebKit的WebView. 首先,布局文件activity_main.xml: <LinearLayout xmlns:android=&q ...

  10. android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

随机推荐

  1. iOS 性能优化点

    用 ARC 管理内存 在正确的地方使用 reuseIdentifier 尽量把 views 设置为完全不透明 如果你有透明的 Views 你应该设置它们的 opaque(不透明)属性为 YES.例如一 ...

  2. 树形DP——动态规划与数据结构的结合,在树上做DP

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法与数据结构的第15篇,也是动态规划系列的第4篇. 之前的几篇文章当中一直在聊背包问题,不知道大家有没有觉得有些腻味了.虽然经典的文 ...

  3. Vertica的这些事(四)——-vertica加密数据

    通过创建 Secure Access Policies可以对vertica中的某一列数据进行加密: CREATE ACCESS POLICY ON [schema][tablename] FOR CO ...

  4. 万字长文带你入门Zookeeper!!!

    导读 文章首发于微信公众号[码猿技术专栏],原创不易,谢谢支持. Zookeeper 相信大家都听说过,最典型的使用就是作为服务注册中心.今天陈某带大家从零基础入门 Zookeeper,看了本文,你将 ...

  5. 初始WebApi(1)

    如果你要问我WebApi是干嘛,我只能说它是的给数据.哈哈哈哈哈,这几天也才刚刚了解了解关于WebApi的知识,今天就来谈谈吧. 1.创建WebApi项目 第一步:选择ASP.NET Web应用程序 ...

  6. json格式的文件操作

    1.字典转换为字符串(json.dumps) jsongeshi={"name":"yajuan","age":"10" ...

  7. 7.4 private 成员变量的私有

    /* * 学生类(age不能为负数.将age参数私有,创建方法判断age不为负.被private修饰的成员只能在本类中被访问,若想访问可以使用get.set方法) * * 通过对象直接访问成员变量,会 ...

  8. 【python实现卷积神经网络】激活函数的实现(sigmoid、softmax、tanh、relu、leakyrelu、elu、selu、softplus)

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...

  9. vue项目中使用bpmn-流程图预览篇

    前情提要 上文已经实现了节点操作的前进.后退.导入.导出等操作,今日来实现“流程图预览”,以及视图的放大缩小 前提:项目安装过bpmn,安装可见上篇文章 实现要点 bpmn提供了两个神器:Modele ...

  10. Scala——的并行集合

    当出现Kafka单个分区数据量很大,但每个分区的数据量很平均的情况时,我们往往采用下面两种方案增加并行度: l  增加Kafka分区数量 l  对拉取过来的数据执行repartition 但是针对这种 ...