Gson数据解析实例分析

来源:互联网 发布:国际数据流量怎么开通 编辑:程序博客网 时间:2024/06/01 22:33

在日常开发中,对于数据的解析是在所难免的,数据的格式也基本为json格式。数据一般解析为实体类型、集合类型,下面为android开发环境下实例分析,IDE为android studio。

1.Gradle添加依赖

    compile 'com.google.code.gson:gson:2.8.1'

2.实体类型解析

一段json数据:

 {     "username": "admin",     "email": "123456789@qq.com"  }

然后创建一个实体类

public class JsonBean {    //添加注解标志,目的把name标记为json串中对应的username     @SerializedName("username")    private String name;    private String email;    public String getName() {        return name;    }    public JsonBean setName(String name) {        this.name = name;        return this;    }    public String getEmail() {        return email;    }    public JsonBean setEmail(String email) {        this.email = email;        return this;    }    @Override    public String toString() {        String data = "{ \n" + "username:" + name + ",\n email:" + email + "\n}";        return data;    }}

注意: @SerializedName()注解,其作用是为了把json中的数据与变量一一对应起来,如json中username与name对应, 即@SerializedName(“username”)中的username与json中username必须一致。

应用

        String data = " {\n" +                "        \"username\": \"admin\",\n" +                "        \"email\": \"123456789@qq.com\"\n" +                "    }";        JsonBean bean = new Gson().fromJson(data, JsonBean.class);        Toast.makeText(mContext, bean.toString(), Toast.LENGTH_SHORT).show();

成功转换为JsonBean实例对象。

3. 集合类型数据解析

json数据样例

[  {    "username": "zhangsan",    "email": "12345678@gmail.com"  },  {    "username": "lisi",    "email": "12345678@163.com"  },  ...]

实体类还是之前的,具体实现:

        String data = "[ \n" +                "{ \n" +                "\"username\": \"zhangsan\", \n"                + " \"email\": \"10\"  \n " +                "}, \n" +                "{ \n" +                "\"username\": \"lisi\", \n" +                "\"email\": \"20\"     \n" +                "} \n" +                "]";        Type type = new TypeToken<List<JsonBean>>(){}.getType();        List<JsonBean> bean =  new Gson().fromJson(data, type);        Toast.makeText(mContext, bean.get(0).toString() + bean.get(1).toString(), Toast                .LENGTH_SHORT).show();

另外一种常见的json格式为:

{    "code": 200,    "message": "成功",     data: [             {                "username": "qwe",                "email": "12123@a.com"             },             {                "username": "zhangsan",                "email": "1234@b.com"             },            ...         ]}

此时的实体类可以这么写:

public class JsonBean {    @SerializedName("code")    private int code;    @SerializedName("message")    private String message;    @SerializedName("data")    private List<MyData> mDatas;    public int getCode() {        return code;    }    public JsonBean setCode(int code) {        this.code = code;        return this;    }    public String getMessage() {        return message;    }    public JsonBean setMessage(String message) {        this.message = message;        return this;    }    public List<MyData> getDatas() {        return mDatas;    }    public JsonBean setDatas(List<MyData> datas) {        mDatas = datas;        return this;    }    public static class MyData {        @SerializedName("username")        public String username;        @SerializedName("email")        public String email;    }}

如果定义的变量与json数据中的一致,上面注解部分可都去掉,也可只注解不一致的。

具体使用

    //数据就不提供了,仅定义变量       String jsonData = "";       JsonBean jsonBean = new Gson().fromJson(jsonData, JsonBean.class);       List<JsonBean.MyData> datas = jsonBean.getDatas();
原创粉丝点击