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
相关产品推荐
相关产品推荐

