例如我有 json 看起来像:
{
"data": [
{
"name": "one"
},
{
"name": "two"
}
]
}
例如,我有带有字段名称的对象用户。
是否可以编写将数据数组解析为对象用户的方法?
有点像
Call<List<User>> getUsers(@KeyPath("data"))
现在要做到这一点,我需要创建一个类似的包装器类
public class UsersWrapper {
@SerializeName("data")
public ArrayList<User> users;
}
接下来我会做服务
public interface Service {
@GET("users")
Call<UsersWrapper> getUsers()
}
但我所有的请求都只是响应数据,而不是数组中的变量对象。
在这种情况下,我需要为任何数据请求创建包装器。痛苦:(
?
最佳答案
我会这样做:
全局类 Wrapper<T>
解析整个 JSON
public class Wrapper<T> {
public List<T> data;
}
和User
解析实际数组;
public class User {
public String name;
}
然后,API接口(interface):
@GET("/people")
Wrapper<User> getUsers();
并且在 DataSource
类只是做这样的事情:
@Override
public List<User> getUsers() {
Wrapper<User> usersWrapper = myApiInterface.getUsers();
return usersWrapper.data;
}
更新1:
另一种解决方案是创建自定义 JsonDeserializer
(如描述的 here )对于 List<User>
类型,通过 registerTypeAdapter
注册它与您的自定义 Gson
对象,然后您可以将 Json 直接反序列化为 List<User>
.不过,这个解决方案带来了更多的额外代码,潜在的好处对我来说还不清楚。
关于android - Retrofit 是否支持 json 解析或类似的键路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35040924/