Android 利用Gson生成或解析json

编程之家收集整理的这篇文章主要介绍了Android 利用Gson生成或解析json编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

目前手机端和服务端数据交流格式一般是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"
}
@H_404_15@

先定义一个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";
	}
}
@H_404_15@

定义好这个类,就可以利用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);
@H_404_15@

输入的log如下

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

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

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

看看输出的log

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

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

[
    {
        "id": "2","createDate": "2015-02-01 11:21:27","password": "123456","name": "传说"
    },{
        "id": "2","name": "之美"
    }
]
@H_404_15@

生成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());
@H_404_15@

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());
@H_404_15@

输出的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);
@H_404_15@

更快捷地解析成List

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

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

嵌套的json类似如下

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

生成这个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";
	}
}
@H_404_15@

生成代码如下

		// 生成对象嵌套对象的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());
@H_404_15@

输出的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());
		}
@H_404_15@

输出的结果

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

生成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());
@H_404_15@

打印出来的log

本文博客原创地址:http://www.cnblogs.com/liqw/p/4266209.html

demo下载链接https://files.cnblogs.com/files/liqw/LauncherActivity.zip

总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

猜你在找的Android相关文章

这节主要是讲解jsoup解析HTML页面。由于在android开发过程中,不可避免的涉及到web页面的抓取,解析,展示等等,所以,在这里我主要展示下利用jsoup jar包来抓取cnbeta.com网
Android开发探秘之一:创建可以点击的Button
在Android开发过程中,很多人都熟悉Intent,这是个用于在多个View之间共享数据的类。本节主要是继承上节,通过点选ListView中的文本,把文本中的URL加载到一个新的页面上,并且打印出来
运行环境 Android Studio 4.1.1 compileSdkVersion 29 buildToolsVersion &quot;29.0.2&quot; 点击绿色锤子「make proj
&quot;原文链接&quot; 使用 ConstraintLayout 构建自适应界面 ConstraintLayout 可让您使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局。它与 Rela
WorkManager工作约束,延迟与查询工作 本文可能会混用“工作”与“任务”这两个词。 本文例子使用Kotlin 准备一个工作类(任务)UploadWorker2 class UploadWork
Android教程,View.post方法流程分析。View.post与Handler的post方法有何不同?先来简单看一下Handler的post(Runnable)方法。这个方法是将一个Runna
简介 某些音乐播放或者视频播放的界面上,资源还在加载时,进度条的原点(thumb)会显示一个转圈的效果。 资源加载完成后,又切换回静态效果。这个效果增强了用户体验。 一般来说有美术人员负责设计和切图。
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注