相对于较为传统的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. 模块 序列化 json pickle shelv xml

    序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. json 模块 json.dump(d,f) json.load(f ...

  2. Java实现3次找到假球

    前言 之前老师让写一个程序,就写了写. 正文 题目要求 程序要求 10个铅球中有一个假球(比其他铅球的重量要轻),用天平三次称出假球. 程序设计思路 第一次使用天平分别称5个球,判断轻的一边有假球:拿 ...

  3. Java实现tif/tiff/bmp图片转换png图片

    package org.analysisitem20181016.test; import java.io.File; import java.io.FileOutputStream; import ...

  4. stm32:实现呼吸灯

    1.main.c #include "sys.h" #include "delay.h" #include "key.h" #define ...

  5. 数据挖掘-K-近邻算法

    数据挖掘-K-近邻算法 目录 数据挖掘-K-近邻算法 1. K-近邻算法概述 1.1 K-近邻算法介绍 1.1.1 KNN算法作用 1.1.2 KNN 算法思想 1.1.3 KNN算法特点 1.2 K ...

  6. 安装 elasticsearch For LINUX

    官网下载地址 https://www.elastic.co/cn/downloads/elasticsearch 选择版本为LINUX 当前版本为 es-7.6.2 用tar 命令解压 tar -zx ...

  7. HDU1087:Super Jumping! Jumping! Jumping!(DP水题)

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  8. ubuntu上安装lamp环境命令清单

    #install configuration manager sudo apt-get install tasksel #install basic lamp stack sudo tasksel i ...

  9. Spring(一):Spring入门程序和IoC初步理解

    本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接 https://space.bilibili.com/95256449?spm_id_from=33 ...

  10. 给listview添加长时间点击事件(完成删除操作)

    出现的问题是:当长时间点击listview的时候,触发长时间点击事件的同时也会触发点击事件,处理的办法是在长时间点击事件中加上return true:这样就可以很好的解决了. 给listview天机长 ...