Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 改型是否支持json解析上的keypath或类似的东西?_Android_Json_Retrofit_Retrofit2 - Fatal编程技术网

Android 改型是否支持json解析上的keypath或类似的东西?

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

例如,我的json看起来像:

{
    "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;
}