You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Gson将OkHttp3的ResponseBody转换为自定义User对象列表

用Gson将JSON响应转换为User列表的完整指南

没问题,我来一步步帮你把服务器返回的JSON转成User对象的List/ArrayList,用Gson来实现非常简单:

1. 先引入Gson依赖

首先得确保你的项目里已经添加了Gson库。如果是用Gradle构建(Android项目常用),在app/build.gradle的dependencies里加这行:

implementation 'com.google.code.gson:gson:2.10.1' // 可以替换为最新版本号

如果是Maven项目,就在pom.xml里添加:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

2. 确认User类与JSON字段匹配

你的User类目前的name和password字段刚好对应JSON里的字段,完美适配!如果以后遇到JSON字段和类属性名不一致的情况(比如JSON里是user_name,类里是name),记得用@SerializedName注解做映射,示例如下:

@SerializedName("user_name")
private String name;

现在你的User类不需要修改,直接用就行。

3. 修改响应处理代码(核心步骤)

注意:responseBody.string()只能调用一次,调用后流就会关闭,所以必须先把JSON字符串存到变量里,再做打印和解析操作。下面是修改后的完整onResponse方法:

public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
    int i;
    int size;
    try (ResponseBody responseBody = response.body()) {
        if (!response.isSuccessful()) 
            throw new IOException("Unexpected code " + response);

        // 保留你原有打印响应头的逻辑
        Headers responseHeaders = response.headers();
        for (i = 0, size = responseHeaders.size(); i < size; i++) {
            Log.d("TAG", responseHeaders.name(i) + ": " + responseHeaders.value(i));
        }

        // 1. 先把响应体转成字符串(只能调用一次!)
        String jsonResponse = responseBody.string();
        Log.d("TAG", "Mazal's DB -----> " + jsonResponse);

        // 2. 初始化Gson实例
        Gson gson = new Gson();

        // 3. 解析JSON为List<User>:用TypeToken获取泛型类型
        Type userListType = new TypeToken<List<User>>() {}.getType();
        List<User> userList = gson.fromJson(jsonResponse, userListType);

        // 4. 测试:打印转换后的User列表
        for (User user : userList) {
            Log.d("TAG", "Parsed User: " + user.toString());
        }

    } catch (JsonSyntaxException e) {
        // 处理JSON解析异常,比如格式不匹配的情况
        Log.e("TAG", "JSON解析失败: " + e.getMessage());
        e.printStackTrace();
    }
}

重要提醒:检查服务器返回的JSON结构

要确保服务器返回的是JSON数组格式,比如:

[{"name":"Alice","password":"123456"},{"name":"Bob","password":"abcdef"}]

如果服务器返回的是嵌套结构(比如外层有个data字段包裹数组),比如:

{"code":200,"data":[{"name":"Alice","password":"123456"},{"name":"Bob","password":"abcdef"}]}

那你需要先创建一个包装类:

public class UserResponse {
    private int code;
    private List<User> data;
    // 生成对应的getter、setter方法
}

然后解析的时候改成:

UserResponse userResponse = gson.fromJson(jsonResponse, UserResponse.class);
List<User> userList = userResponse.getData();

这样就能完美把JSON转换成你需要的User列表啦!

内容的提问来源于stack exchange,提问作者Eli Kozinets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:37:35