目前手机端和服务端数据交流格式一般是json,而谷歌提供了Gson来解析json。下载Gson:https://code.google.com/p/google-gson/

下载的放在lib并导入,若出现错误:java.lang.NoClassDefFoundError: com.google.gson.Gson

是因为没有导入android-support-v4.jar,导入即可。

一、单个对象生成json

生成以下类,该怎么生成呢?

{
"createDate": "2015-02-01 10:39:50",
"id": "1",
"name": "传说之美",
"password": "123456"
}

先定义一个account类,属性有id、name、password、createDate。

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字符串了。

		// 生成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,那如何将其解析为单个对象,很简单。

		// 利用gson解析json字符串为单个对象
Account account1 = gson.fromJson(jsonString, Account.class);
Log.i("", account1.toString());

看看输出的log

三、生成单个对象的json数组

什么事json数组,类似下面的

[
{
"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数组代码如下

		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数组解析如下

		// 解析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

或者用更快捷的转化方法

		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

		// 更快捷地解析成List
Type listType = new TypeToken<ArrayList<Account>>(){}.getType();
ArrayList<Account> accsList = new Gson().fromJson(accountArray.toString(), listType);
Log.i("accsList",accsList.toString());

五、生成一个对象嵌套对象的json

嵌套的json类似如下

{
"member": {
"id": "4",
"name": "我是传说"
},
"id": "4",
"createDate": "2015-02-02 12:03:32",
"password": "888888",
"name": "传说之美"
}

生成这个json有2种方法。

1、再添加一个member类,像添加account类一样添加即可。

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";
}
}

生成代码如下

		// 生成对象嵌套对象的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 

		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 

定义一个类

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并解析

		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

Android 利用Gson生成或解析json的更多相关文章

  1. Amdroid示例:利用Gson生成或解析json

    转自:http://www.cnblogs.com/liqw/p/4266209.html 目前手机端和服务端数据交流格式一般是json,而谷歌提供了Gson来解析json.下载Gson:https: ...

  2. fastjson生成和解析json数据,序列化和反序列化数据

    本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...

  3. fastjson生成和解析json数据

    本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...

  4. 转:JS中生成和解析JSON

    原文地址:JS中生成和解析JSON 1.JS中生成JSON对象的方法: var json = []; var row1 = {}; row1.id= "1"; row1.name ...

  5. Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson

    Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson等等 本人fastJson用了两年,也是从去年才开始接触Gson,希望下面的总结会对博友有用,至于Gso ...

  6. java使用jackson生成和解析JSON

    java使用jackson生成和解析JSON 1.导包 2.生成json和解析json package test; import com.fasterxml.jackson.core.JsonProc ...

  7. java分享第十三天(fastjson生成和解析json数据,序列化和反序列化数据)

     fastjson简介:Fastjson是一个Java语言编写的高性能功能完善的JSON库.fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jack ...

  8. Android入门(二十二)解析JSON

    原文链接:http://www.orlion.ga/687/ 解析JSON的方式有很多,主要有官方提供的 JSONObject,谷歌的开源库 GSON.另外,一些第三方的开源库如 Jackson.Fa ...

  9. Gson实现自定义解析json格式

    客户端跟服务器交互的时候我们使用json实现 但是 在交互的时候除了传送json对象数据意外 我们还需要传输标志位等 比如我们现在的交互方式格式 对象 { "data": { &q ...

随机推荐

  1. 陷阱~EF中的Update与Insert共用一个数据上下文

    事情是这样的,有一个列表,里面有很多用户信息,可能会有重复的用户,将这个列表的用户插入到数据表中,如果用户已经存在,就更新这个用户的FillTimes 字段,让它加1,使用的底层ORM是entity ...

  2. vsftpd的安装

    好像linux下的服务的配置和文件分布都差不多, 如httpd, vsftpd, named. 都是: 在/etc/???下面进行配置???.conf, 然后在/var/???放置实际要处理的文件/目 ...

  3. linux下面覆盖文件,如何实现直接覆盖,不提示

    转自:http://w-tingsheng.blog.163.com/blog/static/2505603420124309130528/ cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,当文 ...

  4. POJ 2442 Sequence

    Pro. 1 给定k个有序表,取其中前n小的数字.组成一个新表,求该表? 算法: 由于  a1[1] < a1[2] < a1[3] ... <a1[n] a2[1] < a2 ...

  5. WP_Image_Editor_Imagick 漏洞临时解决方法

    导读 阿里云推送的一条短信通知:存放在上面的WordPress程序有WP_Image_Editor_Imagick漏洞问题,需要登入后台补丁等等的暗示.当然,如果需要在线补丁则需要升级阿里云的安骑士专 ...

  6. 百度图片爬虫-python版-如何爬取百度图片?

    上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...

  7. PHP读取csv文件

    <?php //取数据 $f_d = file_get_contents('tpl_import_info.csv'); $f_d = iconv('gbk', 'utf-8', $f_d); ...

  8. UML基础:统一建模语言简介

    目录 背景知识 用例图 类图 序列图 状态图 活动图 组件图 部署图 结束语 英文原文:UML basics: An introduction to the Unified Modeling Lang ...

  9. 《ASP.NET MVC4 WEB编程》学习笔记------RenderBody,RenderPage,RenderSection

    ASP.NET MVC 3 已经正式发布了,现在估计许多人都在拼命学,我也不能例外,刚刚看到了一篇文章,介绍了三个非常有用的方法:RenderBody,RenderPage和RenderSection ...

  10. Reverse Pairs

    For an array A, if i < j, and A [i] > A [j], called (A [i], A [j]) is a reverse pair.return to ...