Android中Retrofit无法生成JSON Schema?如何用jsonschema2pojo创建Java模型类
解决Retrofit2下二维JSON数组的Java模型创建问题
你的JSON是二维字符串数组结构,不用纠结jsonschema2pojo的空白问题,直接用下面两种方案处理:
方案1:直接用通用集合接收
Retrofit2支持直接用List<List<String>>作为返回类型,不需要额外写模型类。
定义接口:
public interface MinisterApi { @GET("你的接口地址") Call<List<List<String>>> getMinisters(); }
调用后,返回的列表里第一个元素是表头,剩下的都是数据行,你可以自己按需处理表头和数据的对应关系。
方案2:封装成实体类(更面向对象)
如果想把数据封装成实体类,需要先解析成二维数组,再手动映射到实体对象:
1. 编写Minister实体类
public class Minister { private String serialNumber; private String name; private String portfolio; private String contactNumber; private String proName; private String proContact; private String proContactNumber; // 带参构造方法 public Minister(String serialNumber, String name, String portfolio, String contactNumber, String proName, String proContact, String proContactNumber) { this.serialNumber = serialNumber; this.name = name; this.portfolio = portfolio; this.contactNumber = contactNumber; this.proName = proName; this.proContact = proContact; this.proContactNumber = proContactNumber; } // 自行补充getter、setter方法 }
2. 解析并转换数据
在Retrofit的回调里处理数据映射:
call.enqueue(new Callback<List<List<String>>>() { @Override public void onResponse(Call<List<List<String>>> call, Response<List<List<String>>> response) { if (response.isSuccessful() && response.body() != null) { List<List<String>> rawData = response.body(); List<Minister> ministerList = new ArrayList<>(); // 跳过第一行表头,遍历数据行 for (int i = 1; i < rawData.size(); i++) { List<String> row = rawData.get(i); Minister minister = new Minister( row.get(0), row.get(1), row.get(2), row.get(3), row.get(4), row.get(5), row.get(6) ); ministerList.add(minister); } // 这里就拿到了封装好的实体列表,后续按需使用 } } @Override public void onFailure(Call<List<List<String>>> call, Throwable t) { // 处理请求失败逻辑 } });
关于jsonschema2pojo空白的说明
这个工具对纯数组结构的JSON兼容性较差,所以才会返回空白页面,用上面的方案完全可以满足你的需求,不需要依赖它。
内容的提问来源于stack exchange,提问作者Attaullah
相关产品推荐
相关产品推荐

