Android-网页解析-gson的使用
相对于较为传统的Json解析来说,google共享的开源Gson在解析速度和所使用的内存在有着明显的优势,虽然说阿里巴巴也提供了fastgson包,但是它跟Gson的处理速度大同小异,只是底层实现的原理不同,在这里就来学习一下怎么使用google的开源包Gson(在学习之间你应该下载好google gson包)
Gson的解析非常简单,但是它的解析规则是必须有一个bean文件,这个bean文件的内容跟JSon数据类型是一一对应的
|
public class user { |
Gson有两个重要的方法,一个就是tojson,一个就是fromjson。
tojson就是将bean里面的内容转换为json内容
|
user u=new Gson g=new //打印结果是{"name":"zhangsan","age":19} |
当然它还可以承担一些复杂的操作,比如通过集合插入一组数据
|
List<user> //打印结果是[{"name":"zhangsan","age":19},{"name":"zhangsan2","age":19}] //注意,对于Json而言,【】代表数组,{}代表一个对象 |
当然它还可以实现更复杂的对象,在一个Json对象中再嵌套一个Json对象,因为涉及到要更改user内容,这边就不演示了
2、fromjson,从我们的Json对象封装出一个一个的bean对象
|
user System.out.println(u.getName()+" //打印结果是zhangsan 12 |
如果你的Json里面不止一个对象,那么你就得使用一个集合来装,我们这里模拟一个list来装的例子,在使用list装的过程中我们会使用到一个工具类,typeToken,通过它我们可以获取一个泛型的数据类型,使用方法十分简单,TypeToken(泛型)(){}.gettype()即可,返回一个type类型,这就是fromjson所需要的type类型,来自于reflect包
|
user //打印结果是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的使用的更多相关文章
- Android JSON、GSON、FastJson的封装与解析
声明: 1.本帖只提供代码,不深入讲解原理.如果读者想要深入了解,那就不要在这个帖子上浪费时间了 2.客户端用的是Google官方的Volley访问服务器,具体了解Volley请戳 这里 3.本帖三种 ...
- Android中使用Gson解析JSON数据的两种方法
Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...
- Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...
- Android中使用Gson解析JSON数据
Android中使用Gson解析JSON数据 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list ...
- Android Studio下的简单网页解析
Android Studio下的简单网页解析 一.导入数据 导入前添加依赖 implementation 'org.jsoup:jsoup:1.11.3' 使用字符串导入 String html = ...
- Android Volley和Gson实现网络数据加载
Android Volley和Gson实现网络数据加载 先看接口 1 升级接口 http://s.meibeike.com/mcloud/ota/cloudService POST请求 参数列表如下 ...
- 1.Android中解析json程序代码
Android程序解析json数据可以通过gson的方式,这种情况需要导入相应的jar包.测试代码如下: @Override protected void onCreate(Bundle savedI ...
- Android数据解析-JSON解析
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- Android网页浏览器的开发
Android网页浏览器的核心Widget是包含了WebKit的WebView. 首先,布局文件activity_main.xml: <LinearLayout xmlns:android=&q ...
- android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
随机推荐
- 基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (番外篇)
前言 回顾之前的两篇Swagger做Api接口文档,我们大体上学会了如何在net core3.1的项目基础上,搭建一套自动生产API接口说明文档的框架. 本来在Swagger的基础上,前后端开发人员在 ...
- CVE-2020-7961 Liferay Portal 复现分析
漏洞说明: Liferay是一个开源的Portal(认证)产品,提供对多个独立系统的内容集成,为企业信息.流程等的整合提供了一套完整的解决方案,和其他商业产品相比,Liferay有着很多优良的特性,而 ...
- CentOS忘记mariadb/mysql root密码解决办法
本文不再更新,可能存在内容过时的情况,实时更新请访问原地址:CentOS忘记mariadb/mysql root密码解决办法: 这里有两种方式实现修改mariadb root密码. mariadb版本 ...
- java Jsoup.clean 处理入参时,会将换行符解析成空字符串问题
Json 中clean方法有两个: 一:会格式化入参,将换行符替换成空格 clean(String bodyHtml, String baseUri, Whitelist whitelist) 二:n ...
- 剑指Offer系列之题1~题5
目录 1.二维数组的查找 2.替换空格 3.从尾到头打印链表 4.链表中环的入口节点 5.重建二叉树 写在前面:本随笔中包含五道题:题目描述,题目思路以及对应解法. 1.二维数组的查找 在一个二维数组 ...
- python图片拼接
python图片拼接 这两天看到一张图片,想用python来实现类似的图片拼接 先分析图片: 很明显,这张图片是由多张图片叠加拼接而成 从最后一张开始开始叠加,之后的每张图片都往上平移了一个固定的距 ...
- Flask 入门(八)
flask操作数据库:操作数据: 承接上文: 修改main.py中的代码如下: #encoding:utf-8 from flask_sqlalchemy import SQLAlchemy from ...
- String 对象-->charAt() 方法
1.定义和用法 charAt() 方法获取指定下标的字符,下标从0开始 语法: string.charAt(index) 参数: index:指定的下标 举例:获取下标为2的字符 var str = ...
- 【python实现卷积神经网络】卷积层Conv2D反向传播过程
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
- tf.nn.depthwise_conv2d 卷积
tf.nn.depthwise_conv2d( input, filter, strides, padding, rate=None, name=None, data_format=None ) 参数 ...