Java Gson-使用两个不同的键读取值
在我的Android项目中,我有两种类型的响应,其中除了两个键之外,两个响应都是相同的 答复1Java Gson-使用两个不同的键读取值,java,android,android-studio,gson,android-json,Java,Android,Android Studio,Gson,Android Json,在我的Android项目中,我有两种类型的响应,其中除了两个键之外,两个响应都是相同的 答复1 {"fullName":"William Sherlock Scott Holmes","address":"221B Baker Street, London, England, UK","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]} 答复2 {"name":"Sherloc
{"fullName":"William Sherlock Scott Holmes","address":"221B Baker Street, London, England, UK","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]}
答复2
{"name":"Sherlock","city":"London","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]}
如果您看到响应,则只有两个关键字名称正在更改全名/姓名和地址/城市
我不想为其他响应再创建一个pojo。我的问题是:是否可以只使用一个Pojo来读取两个响应
public class AccountInfo {
private String name;
private String city;
//other objects
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
//other setters and getters
}
任何帮助都将不胜感激 是的,你可以在一次POJO中完成。试试这个:
public class POJO {
@SerializedName("name")
public String name;
@SerializedName("city")
public String city;
@SerializedName("fullName")
public String fullName;
@SerializedName("address")
public String address;
@SerializedName("downloads")
public Integer downloads;
@SerializedName("rating")
public Integer rating;
@SerializedName("repos")
public List<String> repos = new ArrayList<String>();
}
公共类POJO{
@序列化名称(“名称”)
公共字符串名称;
@序列化名称(“城市”)
公共字符串城市;
@SerializedName(“全名”)
公共字符串全名;
@序列化名称(“地址”)
公共字符串地址;
@SerializedName(“下载”)
公开整数下载;
@序列化名称(“评级”)
公众整数评级;
@序列化名称(“回购”)
public List repos=new ArrayList();
}
解析时,必须检查null的值。例如-
解析响应1时:name和city变量将为空
解析响应2时:全名和地址将为空
注意:在使用else之前,请尝试检查null值。您将获得nullpointerexception您可以使用注释对成员进行注释,以接受来自两个不同json名称的值:
@SerializedName(value = "name", alternate = {"fullName"})
private String name;
@SerializedName(value = "city", alternate = {"address"})
private String city;
然后,可以将任一命名元素放置到注释如下的成员中
更新:
@SerializedName
当在中添加反序列化时,您可以完全使用一个POJO类来反序列化两个响应。您的POJO类将包含来自两个响应的键
public class Response {
private String name;
private String city;
private String fullName;
private String address;
private Integer downloads;
private Integer rating;
private List<String> repos ;
}
公共类响应{
私有字符串名称;
私人城市;
私有字符串全名;
私有字符串地址;
私有整数下载;
私人整数评级;
私人上市回购;
}
但是在使用Response类时,请注意,对于第一个Response,名称和城市将为空,对于第二个,地址和全名将定义POJO类中所有可能的字段,如
public class AccountInfo {
private String name;
private String city;
private String fullname;
private String address;
}
在对这些字段中的null执行操作检查时将这些额外字段设置为getter和setter,如果getter字段为空,则不会产生任何问题。试试这个,如果我能帮你什么,请告诉我else@Rakshit谢谢检查道格·史蒂文森的回答……非常感谢@Doug Stevenson的答案更充分,因为我不必检查
null
。做得好的方法不好。谢谢你的回答。。。但您是否检查了其他答案是否与您的答案相同…getting java.lang.IllegalArgumentException:无法为类创建转换器