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

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.获取第一个对象信息
这里写图片描述

结束

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HLQ_Struggle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值