转自: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的更多相关文章

  1. Android 利用Gson生成或解析json

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

  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. Gson实现自定义解析json格式

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

  9. Google中Gson的使用解析json数据-------学习篇

    之前写过一篇Gson解析json数据的基本应用,这里不多说,直接上例子. 有兴趣的可以先阅读下之前那篇,这里附上链接: http://www.cnblogs.com/Ant-soldier/p/632 ...

随机推荐

  1. JS--回到顶部代码

    原文地址:http://www.cnblogs.com/liguiqiang1986/articles/3132023.html JS--回到顶部代码 <!DOCTYPE html PUBLIC ...

  2. Java 自定义实现 LRU 缓存算法

    背景 LinkedHashMap继承自HashMap,内部提供了一个removeEldestEntry方法,该方法正是实现LRU策略的关键所在,且HashMap内部专门为LinkedHashMap提供 ...

  3. 程序员求职之道(《程序员面试笔试宝典》)之程序设计基础(static的使用)?

    在C语言中,关键字static的意思是静态,它有三个明显的作用:首先,在函数体内,静态变量具有"记忆"功能,即一个被声明为静态的变量在这一函数被调用过程中其值维持不变.其次,在模块 ...

  4. How to uninstall (remove) JAVA from OS X Lion

    Open terminal (Applications -> Utilities -> Terminal) To remove JVM enter folowing: sudo rm -r ...

  5. 45 个非常有用的 Oracle 查询语句(转)

    这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快快收 ...

  6. Android应用程序资源的查找过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8806798 我们知道,在Android系统中, ...

  7. [springmvc+mybatis][关于这两个框架的学习,我想说]

    关于学习笔记 在对java web有了一定的了解后,这两个框架没怎么写学习笔记了…毕竟项目驱动型…… 关于学习资料 强烈推荐传智播客的燕青讲解的 让我对这种培训班教育的资料刮目相看(不过还是千万别去这 ...

  8. linux磁盘管理、新增磁盘、分区、挂载

    1. du -sh 查看目录.文件总大小 -a:全部文件与目录大小都列出来.如果不加任何选项和参数只列出目录(包含子目录)大小. -c:最后加总2. df -h 查看磁盘使用量3. lsblk 查看系 ...

  9. docker四种网络模式

    1,host模式 启动容器时,添加参数--net=host 此模式和宿主机使用的是同1个ip,适合上网. 2,container模式 启动容器时,添加参数--net=container,docker ...

  10. 用CSS画五角星

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...