Android JSON数据解析(GSON方式)
要创建和解析JSON数据,也可以使用GSON来完成。GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。使用GSON,可以很容易的将一串JSON数据转换为一个Java对象,或是将一个Java对象转换为相应的JSON数据。
1.GSON的两个重要方法
在GSON的API中,提供了两个重要的方法:toJson()和fromJson()方法。其中,toJson()方法用来实现将Java对象转换为相应的JSON数据,fromJson()方法则用来实现将JSON数据转换为相应的Java对象。
1.1 toJson()方法
toJson()方法用于将Java对象转换为相应的JSON数据,主要有以下几种形式:
(1)String toJson(JsonElement jsonElement);
(2)String toJson(Object src);
(3)String toJson(Object src, Type typeOfSrc);
其中,方法(1)用于将JsonElement对象(可以是JsonObject、JsonArray等)转换成JSON数据;方法(2)用于将指定的Object对象序列化成相应的JSON数据;方法(3)用于将指定的Object对象(可以包括泛型类型)序列化成相应的JSON数据。
1.2 fromJson()方法
fromJson()方法用于将JSON数据转换为相应的Java对象,主要有以下几种形式:
(1)<T> T fromJson(JsonElement json, Class<T> classOfT);
(2)<T> T fromJson(JsonElement json, Type typeOfT);
(3)<T> T fromJson(JsonReader reader, Type typeOfT);
(4)<T> T fromJson(Reader reader, Class<T> classOfT);
(5)<T> T fromJson(Reader reader, Type typeOfT);
(6)<T> T fromJson(String json, Class<T> classOfT);
(7)<T> T fromJson(String json, Type typeOfT);
以上的方法用于将不同形式的JSON数据解析成Java对象。
2.在服务器端生成JSON数据
要使用GSON技术在服务器端生成JSON数据,首先需要完成以下两个准备工作。
(1)使用MyEclipse创建了一个Web Project,这里我将该工程命名为了“GsonDemoProject”,用来模拟服务器端的Web服务。
(2)往该工程中导入GSON的API数据包gson-2.2.1.jar。
然后,我们便可以在该工程中创建一个JsonTools工具类,并实现静态方法createJsonString(),在该方法中通过使用GSON技术来生成JSON数据。该方法的具体实现如下。
public class JsonTools {/** Function : 生成JSON字符串* Param : value 想要转换成JSON字符串的Object对象* Retuen : JSON字符串* Author : 博客园-依旧淡然*/public static String createJsonString(Object value) {Gson gson = new Gson();String string = gson.toJson(value);return string;}}
可以看到,这个方法的具体实现非常简单,首先创建一个Gson对象,然后通过调用Gson对象的toJson()方法,将传进来的value(任意的Java对象)转换成JSON字符串即可。
通过使用该方法,我们可以很方便的将任意Java对象传递进来,并将其转化成JSON数据。和上一篇博文中一样,我们可以在JsonService类中,实现一个简单的获取Person对象列表的方法,具体如下:
/** Function : 获取Person对象列表* Author : 博客园-依旧淡然*/public List<Person> getListPerson() {List<Person> list = new ArrayList<Person>();Person person1 = new Person(001, "jack", 25);Person person2 = new Person(002, "rose", 24);Person person3 = new Person(003, "bob", 26);list.add(person1);list.add(person2);list.add(person3);return list;}
在该方法中,我们向List列表中加入了3个Person对象,每个Person对象具有id(int)、name(String)和age(int)三个属性。
最后,我们还需要创建一个继承自HttpServlet的JsonAction类,并实现其中的doPost()方法,用来响应客户端对服务器的请求。具体如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();List<Person> listPerson = jsonService.getListPerson();String str = null;String action_flag = request.getParameter("action_flag");if(action_flag.equals("persons") {str = JsonTools.createJsonString(listPerson);}out.println(str);out.flush();out.close();}
在该方法中,我们通过调用JsonService类中的getListPerson()方法获得了Person对象列表listPerson,并将其传入JsonTools.createJsonString()方法中,生成了Person对象列表的JSON数据。将该工程发布到Tomcat上,使用浏览器访问该Web工程,可以看到如图1所示的界面,Person对象列表被成功的转化成了JSON数据。
图1 生成的JSON数据
3.在客户端解析JSON数据
在Android工程中,我们可以通过HttpURLConnection接口访问图1所示的URL来获得服务器上的JSON数据。
得到JSON数据之后,便可以通过使用前面提到的fromJson()方法,将图1 所示的JSON数据还原成对应的Person对象列表了。当然了,因为这里使用到了GSON,同样需要向Android工程中导入gson-2.2.1.jar包。具体的实现方法如下。
/** Function : 解析JSON数据,还原成Person对象列表* Param : jsonString 从服务器获得的Json数据* Retuen : Person对象列表* Author : 博客园-依旧淡然*/public static List<Person> getListPerson(String jsonString) {List<Person> list = new ArrayList<Person>();Gson gson = new Gson();list = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType());return list;}
可以看到,使用GSON解析JSON数据的代码实现也非常简单。其中,TypeToken是GSON提供的数据类型转换器,支持多种数据集合类型转换,其反射机制可以实现将解析出来的Java对象映射到对应的数据集合中。
在本实例中,同样点击Button按钮向服务器发送获取JSON数据的请求,从服务器获得JSON数据后,使用以上的代码完成对JSON数据的解析,最后将解析得到的Person对象依次显示在TextView控件中。程序运行的结果如图2所示。
图2 运行结果
Android JSON数据解析(GSON方式)相关推荐
- Android json数据解析及简单例子
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
- jQuery AJAX获取JSON数据解析多种方式示例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android json数据解析
前言 喜欢在前言里讲一下自己的现状,或许能有共鸣的同学,更多的是留给自己一个纪念,几个月或者几年再回来看的时候还是会很有感慨.今天说说语言,json这种数据格式之前我做服务器端的时候天天接触,天真的以 ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- json数据解析 android,Android基础之json数据解析
这次来聊聊Android中json数据的解析,既然是基础就要求只要你看一遍就必须会的,不牵涉到太多的复杂逻辑,目的就是让你初步认识json数据的解析和学会对简单的json数据进行解析. 首先第一步我们 ...
- Android学习笔记44:JSON数据解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 本文将主要介绍在Android ...
- Android JSON数据与实体类之间的相互转化-------GSON的简单用法
Android JSON数据与实体类之间的相互转化-------GSON的用法 1_Gson的导入 1.1_方法一:直接导入jar包 1.2_方法二:引入依赖 2_json形式的字符串互转实体对象 2 ...
- Android系列---JSON数据解析
http://www.cnblogs.com/xiaoluo501395377/p/3446605.html Android系列---JSON数据解析 转载于:https://www.cnblogs. ...
- JSON数据解析的三种情况+pjson的方式
直接解析JavaScript中的json字符串 <!-- 解析页面内的字符串 --> <div align="center"><table class ...
最新文章
- 关于Java招聘那点事
- mysql修改网络服务_MySql-Server 就要修改成允许 Web-Server 进行远程连接. 最后一步 需要使用ALTER USER … ACCOUNT UNLOCK语句进行解锁了:...
- html如何设置图片循环旋转动画效果,如何使用css3实现图片自动旋转的特效(完整代码)...
- Linux sed 写命令常见使用案例
- Spring Boot 1.0和Spring Boot 1.0.1错误修复版本
- shell学习笔记二则:统计空间
- mysql一列数据转为一行_最最完整的 MySQL 规范都在这了
- 微信小程序-仿淘宝(附真机测试图)(持续更新中。。。)
- Linux教程+操作系统教程 -- 大全
- python爬取谷歌图片_selenium+python 爬取网络图片(1) -- soso、谷歌、好搜
- 【解决】linux磁盘扩容大全:新增磁盘、原磁盘扩容、home分区root分区扩容
- NLP教程笔记:BERT 双向语言模型
- IE浏览器收藏夹里面的内容不显示
- systemtap工具使用介绍
- iso硬盘安装 凤凰os_系统之家ISO硬盘安装图解
- php 获取当天是星期几,php获取时间是星期几代码
- 【错误记录】手机应用无法联网 ( 添加 READ_PRIVILEGED_PHONE_STATE 权限导致手机应用网络不可用 )
- 监督学习--分类之决策树
- 汽车理论第六章matlab,matlab汽车理论第一章
- Python3,os模块还可以这样玩,自动删除磁盘文件,非必要切勿操作。