Android 改型是否支持json解析上的keypath或类似的东西?
例如,我的json看起来像:Android 改型是否支持json解析上的keypath或类似的东西?,android,json,retrofit,retrofit2,Android,Json,Retrofit,Retrofit2,例如,我的json看起来像: { "data": [ { "name": "one" }, { "name": "two" } ] } 例如,我有一个字段名为User的对象 是否有可能写入将数据数组解析为用户对象的方法 差不多 Call<List<User>> getUsers(@KeyPath("data")) 调用getUsers(@Ke
{
"data": [
{
"name": "one"
},
{
"name": "two"
}
]
}
例如,我有一个字段名为User的对象
是否有可能写入将数据数组解析为用户对象的方法
差不多
Call<List<User>> getUsers(@KeyPath("data"))
调用getUsers(@KeyPath(“数据”))
现在要做到这一点,我需要创建一个类似
public class UsersWrapper {
@SerializeName("data")
public ArrayList<User> users;
}
公共类UsersWrapper{
@序列化名称(“数据”)
公共ArrayList用户;
}
在服役中,我是下一个
public interface Service {
@GET("users")
Call<UsersWrapper> getUsers()
}
公共接口服务{
@获取(“用户”)
调用getUsers()
}
但我的所有请求都只是对数据的响应,而不是数组中的变量对象
在这种情况下,我需要为任何数据请求创建包装器。痛苦:(
?我会这样做:
全局类Wrapper
解析整个JSON
public class Wrapper<T> {
public List<T> data;
}
然后,API接口:
@GET("/people")
Wrapper<User> getUsers();
Upd1:另一个解决方案是创建定制的
jsondeselizer
(如所述)对于List
类型,通过registerTypeAdapter
将其注册到您的自定义Gson
对象中,然后您可以将Json直接反序列化到List
中。不过,这个解决方案带来了更多额外的代码,潜在的好处对我来说还不清楚。我不理解这个问题。您的响应对象应该是一组User
我倾向于通过使调用返回一个JsonObject
来解决这个问题,然后将调用链接到一个转换器中,该转换器使用一个gson实例从JsonObject
获取列表。然后我跟踪API编写器,直到他们更改它。这很有效。您还可以对类的几个API调用进行推广包装器{public List data;}
假设您的响应都使用相同的数据
键。
@GET("/people")
Wrapper<User> getUsers();
@Override
public List<User> getUsers() {
Wrapper<User> usersWrapper = myApiInterface.getUsers();
return usersWrapper.data;
}