首页 > 系统 > Android > 正文

Android 利用Gson生成或解析json

2019-11-09 18:45:07
字体:
来源:转载
供稿:网友

原文网址:点击打开链接

一、单个对象生成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);     二、解析json字符串为单个对象  在上面已生成了jsonString,那如何将其解析为单个对象,很简单。 // 利用gson解析json字符串为单个对象Account account1 = gson.fromJson(jsonString, Account.class);Log.i("", account1.toString());   三、生成单个对象的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<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());    四、由多个单个对象的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());   或者用更快捷的转化方法  Account[] accountArrays = new Gson().fromJson(accountArray.toString(), Account[].class);for(int i=0;i<accountArrays.length;i++){    Log.i("accountArrays",accountArrays[i].toString());}// 转化为ListList<Account> foosList = Arrays.asList(accountArrays);更快捷地解析成List  // 更快捷地解析成ListType 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";    }}生成代码如下  // 生成对象嵌套对象的jsonAccount 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());    六、解析对象嵌套对象的json  Account account5 = gson.fromJson(object.toString(), Account.class);Log.i("解析对象嵌套对象的json", account5.toString());// 这里用isNull来判断是否存在这个object,存在就拿出member的JSONObjectJSONObject 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 + ", 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());


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表