java - 改造抛出错误预期 BEGIN_OBJECT 但 BEGIN_ARRAY 从数组列表到列表?
问题描述
嗨,我在解析一些 json 时遇到问题。我在 Stackoverflow 上查看了其他一些解决方案,但对我的问题不太满意。我试图让一个简单的 recyleview 工作。任何建议将不胜感激。
json文件类型
[
{
"name": "Javi",
"birthdate": "2018-10-17T00:00:00",
"id": 25
},
界面
public interface UsuariosInterface {
@GET("User")
Call<ArrayList<UsuariosRespuesta>> obtenerListaUsuarios();
}
分离接口
public class UsuariosRespuesta {
private ArrayList<Usuarios> results;
public ArrayList<Usuarios> getResults() {
return results;
}
public void setResults(ArrayList<Usuarios> results) {
this.results = results;
}}
模型
public class Usuarios {
private String name;
private String birthdate;
private Integer id;
}
请求方法
UsuariosInterface service = retrofit.create(UsuariosInterface.class);
Call<ArrayList<UsuariosRespuesta>> usuariosRespuestaCall= service.obtenerListaUsuarios();
usuariosRespuestaCall.enqueue(new Callback<ArrayList<UsuariosRespuesta>>() {
@Override
public void onResponse(Call<ArrayList<UsuariosRespuesta>> call, Response<ArrayList<UsuariosRespuesta>> response) {
if (response.isSuccessful()) {
UsuariosRespuesta usuariosRespuesta = response.body();
ArrayList<Usuarios> listaUsuarios = usuariosRespuesta.getResults();
错误是:
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
我可以理解错误是说数据是一个数组,它应该以一个对象开头,但我无法解决。
解决方案
如果你得到没有任何键的直接列表,那么只需在你的界面中传递列表,比如
@GET("User")
Call<UsuariosRespuesta> obtenerListaUsuarios();
但是你得到一个没有密钥的整个对象,因为你正在做响应应该是这样的 {[{},{},{},.....{}]}
@GET("User")
Call<UsuariosRespuesta> obtenerListaUsuarios();}
当您的数据像这样出现时,上述情况需要
{ [ { }, { } ] } 上层对象引用 thisUsuariosRespuesta
但你直接得到数组 [{},{},{}...] 没有键然后需要Arraylist
响应。
并序列化你的 POJO。
public class Usuarios {
@field:SerializedName("name")
private String name;
@field:SerializedName("birthdate")
private String birthdate;
@field:SerializedName("id")
private Integer id;
}
推荐阅读
- javascript - 如何使用正则表达式从文件 Notepad++ 中分离特定模式的数据?可以导出到 Excel 表吗?
- reactjs - 使用 Material UI 在 React 中溢出的网格项目中的图像
- node.js - 如何在 Firebase 上部署全栈 Node+React 应用程序?
- javascript - 无法使用 Quill.JS setText Textarea 设置文本
- arrays - 如何从 XAML 初始化 Array 类型的可绑定属性
- c++ - 涉及两位数时正确显示网格图?
- python - PyQt5 - 动态添加小部件到布局
- c++ - 交换指针:相当于`std::unique_ptr::swap`
- python - Plotly:旭日形图未正确渲染
- java - 使用两个线程打印偶数和奇数