android - 如何使用Retrofit忽略JSON中根元素中的所有字段,但其中一个?
问题描述
我对改造很陌生,我正在努力解析我的 JSON 响应。我的 JSON 看起来像这样:
{
"id": "111111",
"title": "title place holder",
"author": {
"name": "author place holder"
},
"summary": "summary place holder",
"type": {
"value": "value place holder"
},
"entry": []
}
现在,我不关心根级别的所有元素,除了入口数组。我为 Entry 对象创建了一个模型并忽略了根目录中的所有其他内容,当我尝试使用 Retrofit 获取数据时,出现以下错误:
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
我能做些什么来解决这个问题?
更新
这是我的 Entry 对象模型(我只在我需要的字段中添加了注释):
public class Entry
{
@SerializedName("type")
private Type type;
@SerializedName("title")
private String title;
@SerializedName("summary")
private String summary;
private String id;
@SerializedName("published")
private String published;
private String updated;
@SerializedName("content")
private Content content;
@SerializedName("link")
private Link link;
@SerializedName("media_group")
private List<MediaGroup> mediaGroup;
private Author author;
//GETTERS and SETTERS ....
}
这是我定义 GET 调用的 API 接口:
public interface JsonPlaceHolderApi {
@GET("link_json.json")
Call<List<Entry>> getPosts();
}
这就是我开始改造的方式:
public void start() {
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
Call<List<Entry>> call = jsonPlaceHolderApi.getPosts();
call.enqueue(this);
}
解决方案
此错误意味着您期望 JSON 数组作为响应,但您正在获取 JSON 对象。那么您能否确保您的服务器和您的客户端具有相同的数据类型。
现在错误是因为您的服务器正在发送 JSON 对象,该对象具有我相信您想要的条目JSON 数组。所以最好的方法是List<Entry>
用一些 pojo 类替换说 Response(这将是你的 JSON 对象),从这个响应中你会得到入口 JSON 数组。顺便说一句,使用此站点将您的 json 模式转换为 POJO
推荐阅读
- c# - Zebra 扫描仪 8178 onBarcode 读取事件未触发
- angular - 路由激活的任何保护激活
- python - Tensorflow:将导入的图形操作应用于 2d 张量的每个元素
- c# - 我创建的库使用不同版本的依赖项作为我的 MVC 项目
- apache-spark - Filtering Spark Dataset[Row] switch casing Column value
- c# - 当前上下文中不存在名称 Invoicee1
- python - 是否可以使用 pytest 进行 RESTful API 功能测试/一个好习惯?
- javascript - 用javascript中的'message'替换所有出现的$ {sentence}
- python - 将时间数据 '2019-06-19' 转换为格式 '%d-%m-%Y'
- java - 事务错误:提交事务时出错