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()); } // 转化为List List<Account> foosList = Arrays.asList(accountArrays); |
更快捷地解析成List
1
2
3
4
|
// 更快捷地解析成List Type 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
|
// 生成对象嵌套对象的json Account 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的JSONObject JSONObject 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 ...
随机推荐
- 简单实用后台任务执行框架(Struts2+Spring+AJAX前端web界面可以获取进度)
使用场景: 在平常web开发过程中,有时操作员要做一个后台会运行很长时间的任务(如上传一个大文件到后台处理),而此时前台页面仍需要给用户及时的进度信息反馈,同时还要避免前台页面超时. 框架介绍: 本架 ...
- Spark机器学习笔记一
Spark机器学习库现支持两种接口的API:RDD-based和DataFrame-based,Spark官方网站上说,RDD-based APIs在2.0后进入维护模式,主要的机器学习API是spa ...
- 【POJ1005】I Think I Need a Houseboat
说是计算几何,其实是一道水题.直接算半圆面积即可. #include <iostream> #include <cstdlib> #include <cstdio> ...
- 【转】PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理
相对于linux来说,udev还是一个新事物.然而,尽管它03年才出现,尽管它很低调(J),但它无疑已经成为linux下不可或缺的组件了.udev是什么?它是如何实现的?最近研究Linux设备管理时, ...
- Android——编译odex保护
编译过android源代码的可能试验过改动编译类型.android的初始化编译配置可參考Android--编译系统初始化设置 一.TARGET_BUILD_VARIANT=user 当选择的编译类型为 ...
- HDU4907小技巧
原题http://acm.hdu.edu.cn/showproblem.php?pid=4907 Task schedule Time Limit: 2000/1000 MS (Java/Others ...
- Flashback Recovery Area的设置与取消
在Oracle 10g中, Flash back家族分为以下成员: Flashback Database, Flashback Drop,Flashback Query(分Flashback Quer ...
- html_day4+css
表单控件共有的属性: enabled:表示表单控件可用 disabled:表示表单控件被禁用 readonly:表示表单控件只能读name属性值的作用: 需要将表单的数据提交到服务器处理就要写name ...
- ASP.NET开发学习视频教程大全(共800集)
ASP.NET是微软.NET平台的支柱之一,被广泛应用在WEB等互联网开发领域,因此它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上.这里整理了最全的ASP.NET开发学习视频 ...
- 关于object在使用上的问题
关于object在使用上的问题 1.直接调用标签<object>中的单击事件 <object>是含有onclick和ondblclick两个事件的.按照以往方式,直接在里面调用 ...