java - пример - gsonbuilder
Gson-считывание значения двумя разными ключами (3)
Вы можете аннотировать членов для принятия значений из двух разных имен json, используя аннотацию @SerializedName :
@SerializedName(value = "name", alternate = {"fullName"})
private String name;
@SerializedName(value = "city", alternate = {"address"})
private String city;
Затем любой именованный элемент может быть помещен в элементы, которые аннотируются следующим образом.
ОБНОВЛЕНО: @SerializedName
альтернативные имена при десериализации добавлено в версии 2.4
В моем проекте 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":"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 для десериализации обоих ответов. Ваш класс 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 соблюдайте осторожность, чтобы в первом ответе имя и город были нулевыми , а во втором - адрес и полное имя .
Определите все возможные поля в вашем классе POJO, как
public class AccountInfo {
private String name;
private String city;
private String fullname;
private String address;
}
Выполняя проверку работы на ноль в этих полях