Android解析json-Gson使用

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android解析json-Gson使用相关的知识,希望对你有一定的参考价值。

Gson是一个第三方解析json的库。需求分析:后端向我们前端传递json时,我们需要解析json然后找到我们想要的值。直接讲解如何使用这个第三方库。

一、安装依赖

implementation 'com.google.code.gson:gson:2.8.6'

二、基础用法

1、创建实体类

android前端需要创建一个实体类,与后端传递过来的json相对应。这里拿上一篇文章《Android使用OKhttp3实现登录注册功能+springboot搭建后端》的案例分析。比如点击登录之后,后端会传递一个json给前端。

后端实体类R.java

@Data
public class R {
    @ApiModelProperty(value = "是否成功")
    private Boolean success;

    @ApiModelProperty(value = "返回码")
    private Integer code;

    @ApiModelProperty(value = "返回消息")
    private String message;

    @ApiModelProperty(value = "返回数据")
    private Map<String, Object> data = new HashMap<String, Object>();
    }

后端返回结果的实体类是这几个值。比如前端登录成功后,我们成功获取了json。结果如下:

D/whq登录: {"success":true,"code":20000,"message":"成功","data":{"result":"success login"}}-----------MyResult-------

前端Android实体类ResultGson.java

import java.util.HashMap;
import java.util.Map;

public class ResultGson {
    private Boolean success;
    private Integer code;
    private String message;
    private Map<String, Object> data = new HashMap<String, Object>();

    public ResultGson(Boolean success, Integer code, String message, Map<String, Object> data) {
        this.success = success;
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public ResultGson() {
    }

    @Override
    public String toString() {
        return "ResultGson{" +
                "success=" + success +
                ", code=" + code +
                ", message='" + message + '\\'' +
                ", data=" + data +
                '}';
    }

    public Boolean getSuccess() {
        return success;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Map<String, Object> getData() {
        return data;
    }

    public void setData(Map<String, Object> data) {
        this.data = data;
    }
}

这样就将前后端json对应起来了。

2、创建Gson对象

方法一

Gson gson = new Gson();

方法二

Gson gson = new GsonBuilder().create();

相比直接使用构造方法,GsonBuilder创建的方式更灵活,因为它支持对Gson的配置。选择第二个GsonBuilder。

3、将JSON转换为对象

比如拿登录的案例来说,前端返回的json对象为
MyResult

{"success":true,"code":20000,"message":"成功","data":{"result":"success login"}}

解析:

String MyResult = response.body().string();
Gson gson = new GsonBuilder().create();
ResultGson resultGson = gson.fromJson(MyResult, ResultGson.class);

这样得到的resultGson 就可以获取json的全部值
resultGson

{success=true, code=20000, message='成功', data={result=success login}}
4、将对象转换为JSON
 Map<String, Object> data = new HashMap<String, Object>();
 data.put("result","success login");
 ResultGson json = new ResultGson(true, 20000, "成功", data);
 Log.d("原始json",json.toString());
 Gson gson1 = new GsonBuilder().create();
 String toJson = gson1.toJson(json);
 Log.d("转化之后的json",toJson);

结果:

D/原始json: ResultGson{success=true, code=20000, message='成功', data={result=success login}}
D/转化之后的json: {"code":20000,"data":{"result":"success login"},"message":"成功","success":true}

以上是关于Android解析json-Gson使用的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

Insurance 项目——与移动端交互json-Gson

解析:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

深入解析Android关机

Android课程---Android Studio使用小技巧:提取方法代码片段

如何使用 Android 片段?