Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.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
Java 如何使用响应格式随参数变化的改装?_Java_Android_Json_Deserialization_Retrofit2 - Fatal编程技术网

Java 如何使用响应格式随参数变化的改装?

Java 如何使用响应格式随参数变化的改装?,java,android,json,deserialization,retrofit2,Java,Android,Json,Deserialization,Retrofit2,我有一个登录api,其中响应格式根据用户登录的类型而变化 “type”=4的Json结构 “type”=2的Json格式 我使用这个模型类来处理“type”2 如何处理同一类中“type”=4的情况(或者我应该如何编写不同的模型类)既然您的JSON有不同的键名,我建议您使用映射: public class YourPojo { private int type; private Map<String, String> user; } 公共类YourPojo{ 私有i

我有一个登录api,其中响应格式根据用户登录的类型而变化

“type”=4的Json结构

“type”=2的Json格式

我使用这个模型类来处理“type”2


如何处理同一类中“type”=4的情况(或者我应该如何编写不同的模型类)

既然您的JSON有不同的键名,我建议您使用
映射:

public class YourPojo {
    private int type;
    private Map<String, String> user;
}
公共类YourPojo{
私有int型;
私有地图用户;
}
根据您的
类型
,您应该知道您从响应中得到了哪个
用户
,也许您可以试试这个

public class LoginResponse {
@SerializedName("type")
public int type;
@SerializedName("user")
public User user;

public class User {
    @SerializedName("stud_id")
    public int stud_id;
    @SerializedName("stud_reference_id")
    public String stud_reference_id;


    @SerializedName("coord_id");
    public int coord_id;
    @SerializedName("coord_login_id");
    public int coord_login_id;
    @SerializedName("coord_name")
    public String coord_name;

}
}
如果发现数据存储在变量中…否则该字段存储空数据…您需要始终检查数据是否为空
意思是如果发现stud_id是store…而coord_id是null…或者如果发现crood_id是time stud_id是null

噢,所以我必须在响应中对任意数量的字符串只使用一个map对象,对吗?是的,
map
可以匹配响应中任意数量的键值对如果有嵌套对象,该怎么办,,等如果我将所有这些值存储为如何反序列化它们?然后将
Map
替换为
Map
。这要求您知道哪些字段包含哪些类型的数据。嵌套对象将被转换为地图。然后你就可以投了,我刚才分享了我的一个简单回答。实际响应非常长。您有三种方法…1)每个变量的更改,如我的示例…2)告诉php开发人员您的问题,以更改该流…3)如果您只需要字符串,则用户是“coord”或“stud”,请告诉php开发人员添加您检查的只有一个字段是coord或是stud。。。(不是改变所有的类…只是为你可以识别的coord或stud-taht添加变量)这就是我的实际响应看起来像`{“type”:2,“user”:{“stud\u id”:1,“stud\u name”:“Robert”,“school”:{“school\u id”:1,“school\u name”:“ABC school”,“coordinator”:{“coord_id”:1,“coord_name”:“Hulda Crist”},,“item”:[{“item_type”:“1”,“item_name”:“Cricket”},{“item_type”:“2”,“item_name”:“Judo”}]}”“如果没有更好的解决办法,我就不得不这么做
public class LoginResponse {
    @SerializedName("type")
    public int type;
    @SerializedName("user")
    public User user;

    public class User {
        @SerializedName("stud_id")
        public int stud_id;
        @SerializedName("stud_reference_id")
        public String stud_reference_id;

    }
public class YourPojo {
    private int type;
    private Map<String, String> user;
}
public class LoginResponse {
@SerializedName("type")
public int type;
@SerializedName("user")
public User user;

public class User {
    @SerializedName("stud_id")
    public int stud_id;
    @SerializedName("stud_reference_id")
    public String stud_reference_id;


    @SerializedName("coord_id");
    public int coord_id;
    @SerializedName("coord_login_id");
    public int coord_login_id;
    @SerializedName("coord_name")
    public String coord_name;

}
}