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

Android:Retrofit响应中无键嵌套JsonArray处理问题

解决Retrofit解析嵌套数组JSON的问题

嘿,我看你在处理Retrofit响应的时候遇到了嵌套数组解析的问题,咱们来一步步搞定它!

首先先明确你拿到的JSON结构:

{ "data": [ [ "Admin", "Adress Street 26" ], [ "Users", "Adress Street 27" ] ] }

这里的data字段是个二维字符串数组——简单说就是数组里的每个元素又是一个包含两个字符串的小数组,你的POJO思路是对的,只是可能没写完,我先给你补全完整的正确POJO类:

package com.example;

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Example {

    @SerializedName("data")
    @Expose
    private List<List<String>> data = null;

    public List<List<String>> getData() {
        return data;
    }

    public void setData(List<List<String>> data) {
        this.data = data;
    }
}

接下来要确保你的Retrofit配置没问题,必须加上Gson转换器才能正确解析JSON,给你个完整的Retrofit构建示例:

// 构建Retrofit实例
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("你的API基础地址") // 替换成你实际的API地址
    .addConverterFactory(GsonConverterFactory.create()) // 关键:添加Gson解析器
    .build();

// 定义你的API接口
public interface ApiService {
    @GET("你的接口路径") // 替换成实际的接口路径
    Call<Example> getExampleData();
}

最后是调用接口并处理响应的代码,这里你可以直接拿到解析后的二维列表,然后遍历处理每个条目:

ApiService apiService = retrofit.create(ApiService.class);
Call<Example> call = apiService.getExampleData();

call.enqueue(new Callback<Example>() {
    @Override
    public void onResponse(Call<Example> call, Response<Example> response) {
        if (response.isSuccessful() && response.body() != null) {
            List<List<String>> dataList = response.body().getData();
            // 遍历每个条目,第一个元素是名称,第二个是地址
            for (List<String> item : dataList) {
                String name = item.get(0);
                String address = item.get(1);
                // 这里可以把数据展示到UI或者做其他处理
                System.out.println("名称:" + name + ",地址:" + address);
            }
        } else {
            // 处理请求成功但返回数据异常的情况
            System.out.println("请求异常:" + response.message());
        }
    }

    @Override
    public void onFailure(Call<Example> call, Throwable t) {
        // 处理网络失败的情况
        t.printStackTrace();
    }
});

最后给你几个要注意的点:

  • 确保你的项目里已经添加了Retrofit和Gson转换器的依赖,比如在build.gradle(Module)里:
// Retrofit核心库
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
// Gson转换器
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

(版本号可以换成当前最新的)

  • 确认API返回的Content-Type是application/json,否则Gson会无法正确解析
  • 如果还是解析失败,可以先打印出完整的响应体,检查JSON格式是否和你预期的完全一致,有没有隐藏的拼写错误或者格式问题

内容的提问来源于stack exchange,提问作者Husni Kamal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:06:39