Amdroid示例:利用Gson生成或解析json
转自:http://www.cnblogs.com/liqw/p/4266209.html
目前手机端和服务端数据交流格式一般是json,而谷歌提供了Gson来解析json。下载Gson:https://code.google.com/p/google-gson/
下载的放在lib并导入,若出现错误:java.lang.NoClassDefFoundError: com.google.gson.Gson
是因为没有导入android-support-v4.jar,导入即可。
一、单个对象生成json
生成以下类,该怎么生成呢?
|
1
2
3
4
5
6
|
{ "createDate": "2015-02-01 10:39:50", "id": "1", "name": "传说之美", "password": "123456"} |
先定义一个account类,属性有id、name、password、createDate。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
public class Account { private String id; private String password; private String name; private String createDate; public Account() { super(); } public Account(String id, String password, String name, String createDate) { super(); this.id = id; this.password = password; this.name = name; this.createDate = createDate; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCreateDate() { return createDate; } public void setCreateDate(String createDate) { this.createDate = createDate; } @Override public String toString() { return "Account [id=" + id + ", password=" + password + ", name=" + name + ", createDate=" + createDate + "]\n\n"; }} |
定义好这个类,就可以利用Gson生成json字符串了。
|
1
2
3
4
5
6
7
8
|
// 生成account对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");Account account = new Account("1", "123456", "传说之美", sdf.format(new Date()));// 利用gson对象生成json字符串Gson gson = new Gson();String jsonString = gson.toJson(account); Log.i("", jsonString); |
输入的log如下

二、解析json字符串为单个对象
在上面已生成了jsonString,那如何将其解析为单个对象,很简单。
|
1
2
3
|
// 利用gson解析json字符串为单个对象Account account1 = gson.fromJson(jsonString, Account.class);Log.i("", account1.toString()); |
看看输出的log

三、生成单个对象的json数组
什么事json数组,类似下面的
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[ { "id": "2", "createDate": "2015-02-01 11:21:27", "password": "123456", "name": "传说" }, { "id": "2", "createDate": "2015-02-01 11:21:27", "password": "123456", "name": "之美" }] |
生成json数组代码如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Account account2 = new Account("2", "123456", "传说", sdf.format(new Date()));Account account3 = new Account("2", "123456", "之美", sdf.format(new Date()));List<Account> accountList = new ArrayList<Account>();accountList.add(account2);accountList.add(account3);JSONArray accountArray = new JSONArray();for (int i = 0; i < accountList.size(); i++) { String accountStr = gson.toJson(accountList.get(i)); JSONObject accountObject; try { accountObject = new JSONObject(accountStr); accountArray.put(i, accountObject); } catch (JSONException e) { e.printStackTrace(); }}Log.i("", accountArray.toString()); |
log的输出为

四、由多个单个对象的json数组解析为对个单个对象
多个单个对象组成的json数组解析如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// 解析json数组List<Account> accountList2 = new ArrayList<Account>();for(int i=0;i<accountArray.length(); i++){ JSONObject jsonObject = null; try { jsonObject = accountArray.getJSONObject(i); } catch (JSONException e) { e.printStackTrace(); } if(jsonObject != null){ Account tempAccount = gson.fromJson(jsonObject.toString(), Account.class); accountList2.add(tempAccount); }}Log.i("accountList2", accountList2.toString()); |
输出的log

或者用更快捷的转化方法
|
1
2
3
4
5
6
|
Account[] accountArrays = new Gson().fromJson(accountArray.toString(), Account[].class);for(int i=0;i<accountArrays.length;i++){ Log.i("accountArrays",accountArrays[i].toString());}// 转化为ListList<Account> foosList = Arrays.asList(accountArrays); |
更快捷地解析成List
|
1
2
3
4
|
// 更快捷地解析成ListType listType = new TypeToken<ArrayList<Account>>(){}.getType();ArrayList<Account> accsList = new Gson().fromJson(accountArray.toString(), listType);Log.i("accsList",accsList.toString()); |
五、生成一个对象嵌套对象的json
嵌套的json类似如下
|
1
2
3
4
5
6
7
8
9
10
|
{ "member": { "id": "4", "name": "我是传说" }, "id": "4", "createDate": "2015-02-02 12:03:32", "password": "888888", "name": "传说之美"} |
生成这个json有2种方法。
1、再添加一个member类,像添加account类一样添加即可。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public class Member { private String id; private String name; public Member() { super(); } public Member(String id, String name) { super(); this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Member [id=" + id + ", name=" + name + "]\n\n"; }} |
生成代码如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// 生成对象嵌套对象的jsonAccount account4 = new Account("4", "888888", "传说之美", sdf.format(new Date()));Member member = new Member("4", "我是传说");String accountStr = gson.toJson(account4);String memberStr = gson.toJson(member);JSONObject object = null;try { JSONObject memberObject = new JSONObject(memberStr); object = new JSONObject(accountStr); object.put("member", memberObject); } catch (JSONException e) { e.printStackTrace();}Log.i("", object.toString()); |
输出的log

六、解析对象嵌套对象的json
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Account account5 = gson.fromJson(object.toString(), Account.class);Log.i("解析对象嵌套对象的json", account5.toString());// 这里用isNull来判断是否存在这个object,存在就拿出member的JSONObjectJSONObject memberObject = null;if(!object.isNull("member")){ try { memberObject = object.getJSONObject("member"); } catch (JSONException e) { e.printStackTrace(); }}Member member5 = null;if(null != memberObject){ member5 = gson.fromJson(memberObject.toString(), Member.class); Log.i("解析对象嵌套对象的json", member5.toString());} |
输出的结果

7、另外一种解析对象嵌套对象的json
定义一个类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class AccountObject { private String id; private String password; private String name; private String createDate; private MemberObject memberObject = new MemberObject(); public class MemberObject { private String id; private String name; @Override public String toString() { return "MemberObject [id=" + id + ", name=" + name+ "]\n\n"; } } @Override public String toString() { return "AccountObject [id=" + id + ", password=" + password + ", name=" + name + ", createDate=" + createDate + ","+ memberObject.toString() + "]\n\n"; }} |
生成json并解析
|
1
2
3
4
5
6
7
8
9
|
try { JSONObject mObject = new JSONObject(memberStr); object = new JSONObject(accountStr); object.put("memberObject", mObject); } catch (JSONException e) { e.printStackTrace();}AccountObject accountObject = gson.fromJson(object.toString(), AccountObject.class);Log.i("accountObject", accountObject.toString()); |
打印出来的log

本文博客原创地址:http://www.cnblogs.com/liqw/p/4266209.html
demo下载链接:http://files.cnblogs.com/files/liqw/LauncherActivity.zip
Amdroid示例:利用Gson生成或解析json的更多相关文章
- Android 利用Gson生成或解析json
目前手机端和服务端数据交流格式一般是json,而谷歌提供了Gson来解析json.下载Gson:https://code.google.com/p/google-gson/ 下载的放在lib并导入,若 ...
- fastjson生成和解析json数据,序列化和反序列化数据
本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...
- fastjson生成和解析json数据
本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...
- 转:JS中生成和解析JSON
原文地址:JS中生成和解析JSON 1.JS中生成JSON对象的方法: var json = []; var row1 = {}; row1.id= "1"; row1.name ...
- Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson
Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson等等 本人fastJson用了两年,也是从去年才开始接触Gson,希望下面的总结会对博友有用,至于Gso ...
- java使用jackson生成和解析JSON
java使用jackson生成和解析JSON 1.导包 2.生成json和解析json package test; import com.fasterxml.jackson.core.JsonProc ...
- java分享第十三天(fastjson生成和解析json数据,序列化和反序列化数据)
fastjson简介:Fastjson是一个Java语言编写的高性能功能完善的JSON库.fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jack ...
- Gson实现自定义解析json格式
客户端跟服务器交互的时候我们使用json实现 但是 在交互的时候除了传送json对象数据意外 我们还需要传输标志位等 比如我们现在的交互方式格式 对象 { "data": { &q ...
- Google中Gson的使用解析json数据-------学习篇
之前写过一篇Gson解析json数据的基本应用,这里不多说,直接上例子. 有兴趣的可以先阅读下之前那篇,这里附上链接: http://www.cnblogs.com/Ant-soldier/p/632 ...
随机推荐
- 网站10大致命SEO错误
1.关键字堆砌 我想不出有比胡乱将这些复制的内容放在网站上更差劲的事情了.网站复制一遍又一遍,你肯定也不想看到这么差劲的网站复制. 你在明白我在做什么吗?我并不是一个那么差劲的编辑者,我只是想说明一个 ...
- Java实现配置加载机制
前言 现如今几乎大多数Java应用,例如我们耳熟能详的tomcat, struts2, netty…等等数都数不过来的软件,要满足通用性,都会提供配置文件供使用者定制功能. 甚至有一些例如Netty这 ...
- iOS8 Core Image In Swift:人脸检测以及马赛克
iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用 iOS8 Core Image In Swift:更复杂的滤镜 iOS8 Core Image In Swift:人脸 ...
- CDN云主机与传统虚拟主机功能对比
CDN云主机与传统虚拟主机功能对比 传统的虚拟主机都是单台服务器,一旦机器硬件损坏.IP被封.机房网络故障等,都将导致网站不能访问,严重的情况数据还无法及时取回,即使想换一家服务商也因为没有数据而无能 ...
- last与lastlog命令
lastlog 列出所有用户最后登录的时间和登录终端的地址,如果此用户从来没有登录,则显示:**Never logged in**last 列出用户所有的登录时间和登录终端的地址
- Android Eclipse Errors
1.The import org.apache.http.client; tip: cannot be resolved; resolve: Find library in your sdk and ...
- Spring MVC中数据绑定(转)
Spring MVC中数据绑定 比如Product有一个createTime属性,是java.util.Date类型.那么最简单的转型处理是,在SimpleFormController中覆盖initB ...
- 0122——UITabBarController
UITabBarController是IOS中很常用的一个viewController.UITabBarController通常作为整个程序的rootViewController,而且不能添加到别的c ...
- Eclipse 整合cvs教程及遇到的问题
今天看着视频教程学习cvs版本管理,现在很多企业开发或许都采用了版本管理器,因为这样可以更好的进行团退开发与代码管理,所以学习一种版本管理技术还是很重要的. 最原始的独立版本管理是由两部分组成的,一个 ...
- 跨平台渲染框架尝试 - Texture管理
纹理是渲染器重要的资源,也是比较简单的资源.本文将详细讨论纹理资源的管理. 在资源管理概述中提到,资源就是一堆内存和CPU与GPU的访问权限.纹理管理在资源管理之上,要负责如何使用者一堆内存构造纹理对 ...