Android 利用Gson生成或解析json

Android 利用Gson生成或解析json,第1张

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

目前手机端和服务端数据交流格式一般是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","name": "之美"    }]

生成Json数组代码如下

		Account account2 = new Account("2","传说",sdf.format(new Date()));		Account account3 = new Account("2","之美",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 + ",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下载链接:https://files.cnblogs.com/files/liqw/LauncherActivity.zip

总结

以上是内存溢出为你收集整理的Android 利用Gson生成或解析json全部内容,希望文章能够帮你解决Android 利用Gson生成或解析json所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1119259.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存