android gson 生成,Android 利用Gson生成或解析json

下载的放在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如下

JJfVaegeBccNUhBz.png

二、解析json字符串为单个对象

在上面已生成了jsonString,那如何将其解析为单个对象,很简单。

// 利用gson解析json字符串为单个对象

Account account1 = gson.fromJson(jsonString, Account.class);

Log.i("", account1.toString());

看看输出的log

ugAB13jVgwhgGC2j.png

三、生成单个对象的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 accountList = new ArrayList();

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的输出为

rOtMqVm2ZK01fr9e.png

四、由多个单个对象的json数组解析为对个单个对象

多个单个对象组成的json数组解析如下

// 解析json数组

List accountList2 = new ArrayList();

for(int i=0;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

CrnN59cQyjUdMhbi.png

或者用更快捷的转化方法

Account[] accountArrays = new Gson().fromJson(accountArray.toString(), Account[].class);

for(int i=0;i

Log.i("accountArrays",accountArrays[i].toString());

}

// 转化为List

List foosList = Arrays.asList(accountArrays);

更快捷地解析成List

// 更快捷地解析成List

Type listType = new TypeToken>(){}.getType();

ArrayList 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

Xdns4XnBNrycni9U.png

六、解析对象嵌套对象的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());

}

输出的结果

VQSrbmrK4nqLOwXx.png

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

J11LeEjG6foBwpdR.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值