Android中如何使用Gson优雅地解析JSON数据

来源:安卓APP网作者:葵司头衔:网络博主
导读:本期聚焦于小伙伴创作的《Android中如何使用Gson优雅地解析JSON数据》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Android中如何使用Gson优雅地解析JSON数据》有用,将其分享出去将是对创作者最好的鼓励。

在Android开发中,和服务端进行数据交互时,服务端通常会返回JSON格式的数据,我们需要将这些数据转换成对应的Java对象方便后续使用。Gson是Google推出的轻量级JSON解析库,能够自动完成JSON字符串和Java对象之间的映射,相比原生JSON解析方式代码更简洁,出错概率更低。

Android中如何使用Gson优雅地解析JSON数据

Gson的集成方式

使用Gson首先需要将其引入到Android项目中,在项目的build.gradle文件的dependencies中添加依赖即可,具体添加内容如下:

dependencies {
    implementation 'com.google.code.gson:gson:2.10.1'
}

添加完成后同步项目,就可以在代码中使用Gson的相关功能了。

基础JSON解析示例

假设服务端返回的JSON数据是一个用户对象,结构如下:

{
    "name": "张三",
    "age": 25,
    "is_vip": true
}

首先我们需要创建一个对应的Java实体类,成员变量名需要和JSON中的key保持一致,如果不一致可以通过注解映射,实体类代码如下:

public class User {
    private String name;
    private int age;
    // JSON中的key是is_vip,通过SerializedName注解映射到成员变量isVip
    @SerializedName("is_vip")
    private boolean isVip;

    // 必须提供无参构造方法,Gson反射创建对象时需要
    public User() {
    }

    // getter和setter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isVip() {
        return isVip;
    }

    public void setVip(boolean vip) {
        isVip = vip;
    }
}

接下来使用Gson将上述JSON字符串解析成User对象,代码如下:

// 创建Gson实例
Gson gson = new Gson();
// JSON字符串
String jsonStr = "{\"name\": \"张三\", \"age\": 25, \"is_vip\": true}";
// 解析成User对象
User user = gson.fromJson(jsonStr, User.class);
// 输出解析结果
System.out.println("姓名:" + user.getName());
System.out.println("年龄:" + user.getAge());
System.out.println("是否VIP:" + user.isVip());

解析JSON数组

如果服务端返回的是JSON数组格式的数据,比如多个用户的信息:

[
    {"name": "张三", "age": 25, "is_vip": true},
    {"name": "李四", "age": 30, "is_vip": false}
]

解析数组需要使用TypeToken来获取泛型类型,代码如下:

Gson gson = new Gson();
String jsonArrayStr = "[{\"name\": \"张三\", \"age\": 25, \"is_vip\": true}, {\"name\": \"李四\", \"age\": 30, \"is_vip\": false}]";
// 通过TypeToken获取List<User>的类型
Type type = new TypeToken<List<User>>(){}.getType();
List<User> userList = gson.fromJson(jsonArrayStr, type);
// 遍历解析结果
for (User u : userList) {
    System.out.println("姓名:" + u.getName() + ",年龄:" + u.getAge());
}

自定义解析规则

有时候JSON中的日期格式或者特殊字段需要自定义解析逻辑,Gson支持通过自定义JsonDeserializer来实现。比如JSON中的日期是时间戳格式,我们需要转换成Date对象:

// 自定义日期反序列化器
class DateDeserializer implements JsonDeserializer<Date> {
    @Override
    public Date deserialize(JsonElement json, java.lang.reflect.Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        // 时间戳是长整型,直接转换
        long timestamp = json.getAsLong();
        return new Date(timestamp);
    }
}

// 创建Gson时注册自定义解析器
Gson gson = new GsonBuilder()
        .registerTypeAdapter(Date.class, new DateDeserializer())
        .create();

// 测试JSON,date是时间戳
String jsonWithDate = "{\"name\": \"张三\", \"create_time\": 1698765432000}";

class Order {
    private String name;
    @SerializedName("create_time")
    private Date createTime;

    public Order() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

Order order = gson.fromJson(jsonWithDate, Order.class);
System.out.println("订单名:" + order.getName() + ",创建时间:" + order.getCreateTime());

Java对象转JSON字符串

Gson不仅可以将JSON转成Java对象,也可以将Java对象转成JSON字符串,使用toJson方法即可:

Gson gson = new Gson();
User user = new User();
user.setName("王五");
user.setAge(28);
user.setVip(true);
// 转成JSON字符串
String json = gson.toJson(user);
System.out.println(json);

注意事项

  • 实体类必须提供无参构造方法,否则Gson反射创建对象时会抛出异常。
  • 如果JSON中的key和实体类成员变量名不一致,需要使用@SerializedName注解指定映射的key。
  • 解析时如果JSON中缺少某个字段,对应成员变量会使用默认值,不会报错。
  • 如果JSON中多余的字段没有对应的成员变量,Gson默认会忽略,不会抛出异常。

GsonAndroidJSON解析json_to_java修改时间:2026-06-06 14:34:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。