
目前手机端和服务端数据交流格式一般是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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)