首页 > 系统 > Android > 正文

说说关于Android使用Gson解析Json所需实体类的那些事~

2019-11-09 17:55:27
字体:
来源:转载
供稿:网友

LZ-Says:技术,真的是日积月累,厚积薄发~

前言

目前解析json的方法有很多种,LZ个人认为使用Gson还是一种很不错的选择,因为使用Gson时,我们只需要考虑将json中参数和实体类属性一一对应即可,那么就以下面json数据为大家说明使用Gson解析Json所需实体类的那些事~

示例Json

{ "statusCode": 1100, "message": "获取成功", "data": [ { "pname": "赵怡", "idcard": "228", "checkType": 1, "calendar": "2017-02-06 16:26:26", "recordId": 405, "roomName": "白白", "checkInStartTime": "2017-02-06 15:02:16", "checkInDescript": "登记" }, { "pname": "赵标", "idcard": "1302", "checkType": 1, "calendar": "2017-02-06 16:26:26", "recordId": 403, "roomName": "红红", "checkInStartTime": "2017-02-06 14:42:34", "checkInDescript": "登记" } ]}

如上Json包含三个参数,分别为statusCode(响应码),message(响应码对应消息内容),data(数据),其中data为List。

而且项目中规定接口返回数据格式都是以:响应码,响应码对应内容,数据为主。

根据上面简单分析,我们开始动手写实体类:

public class HttpClassBean{ public int statusCode; public String message; public List<ClassBean> data;}

实体类写法演变

data类型也许会是多个,那么让我们一起看看,怎么写,才比较顺手? 一开始,我们都是这样写:

一开始,我们有多少写多少
public class HttpGreadBean{ public int statusCode; public String message; public List<GreadBean> data;}

。。。 也就是有多少类型就写多少个实体类,而且重要的是,要重复写n次code,messag。那么这时候,有人会说了,单独将code,message提取出去,其他相关实体类继承一下不就得了?也对,这就是我们第二种方式。

之后,我们把重复属性字段提取出来
public class HttpBean{ public int statusCode; public String message;}public class HttpClassBean extends HttpBean{ public List<HttpClassBean> data;}

不满各位,LZ也是一直这么干的,但是今天又发现一种写法,我们只需要编写底层实体类,也就是List<这个类型>的实体类。

最后,只需要关注类型实体类即可

将原有HttpBean修改如下:

public class HttpBean<T> { public int statusCode; public String message; public List<T> data;}

现在,我们只需要关注T即可。那么该怎么通过Gson解析json呢?

我们接着往下瞧~

通过Gson解析json(根据第三种实体类编写而解析)

package com.example.gsonjsonstudy;import java.lang.reflect.Type;import android.app.Activity;import android.os.Bundle;import com.example.gsonjsonstudy.entity.PeopleBean;import com.example.gsonjsonstudy.httpbean.HttpBean;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;public class MainActivity extends Activity { PRivate static final String json = "{/"statusCode/":1100,/"message/":/"获取成功/",/"data/":[{/"pname/":/"赵怡/",/"idcard/":/"228/",/"checkType/":1,/"calendar/":/"2017-02-06 16:26:26/",/"recordId/":405,/"roomName/":/"白白/",/"checkInStartTime/":/"2017-02-06 15:02:16/",/"checkInDescript/":/"登记/"},{/"pname/":/"赵标/",/"idcard/":/"112/",/"checkType/":1,/"calendar/":/"2017-02-06 16:26:26/",/"recordId/":403,/"roomName/":/"红红/",/"checkInStartTime/":/"2017-02-06 14:42:34/",/"checkInDescript/":/"登记/"}]}"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gsonToJsonStudy(); } private void gsonToJsonStudy() { Gson gson = new Gson(); //指定T的类型 Type userType = (Type) new TypeToken<HttpBean<PeopleBean>>(){}.getType(); HttpBean<PeopleBean> peoResult = gson.fromJson(json, userType); //获取第一个对象 PeopleBean bean = peoResult.data.get(0); }}

DeBug截图呈上~

1.指定T类型 这里写图片描述

2.获取第一个对象信息 这里写图片描述

结束

到目前为止,已简单为大家介绍三种写法,个人推荐使用第三种,当然有更好的写法欢迎大家和我分享~


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