recorrer objeto libreria leer deserializar convertir con array java android android-studio android-json android-gson

java - objeto - Gson-Lee un valor con dos claves diferentes



libreria jsonobject java (4)

Defina todos los campos posibles en su clase POJO como

public class AccountInfo { private String name; private String city; private String fullname; private String address; }

Mientras se realiza la operación, verifique que no haya nulos en esos elementos.

En mi proyecto de Android tengo dos tipos de respuesta donde ambas respuestas son idénticas, excepto dos teclas .

Respuesta 1

{"fullName":"William Sherlock Scott Holmes","address":"221B Baker Street, London, England, UK","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]}

Respuesta 2

{"name":"Sherlock","city":"London","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]}

Si ve las respuestas, solo dos nombres clave están cambiando nombre completo / nombre y dirección / ciudad

No quiero crear un pojo más para otra respuesta. Ahora mi pregunta es: ¿Es posible usar solo un Pojo para leer ambas respuestas?

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 }

Cualquier ayuda será apreciada ...


Puede anotar a los miembros para aceptar valores de dos nombres json diferentes utilizando la anotación @SerializedName :

@SerializedName(value = "name", alternate = {"fullName"}) private String name; @SerializedName(value = "city", alternate = {"address"}) private String city;

Cualquiera de los elementos nombrados se puede colocar en los miembros que están anotados de esta manera.

ACTUALIZADO: @SerializedName nombres alternativos cuando se agrega la deserialización en la versión 2.4


Sí, puede utilizar totalmente una clase POJO para deserializar ambas respuestas. Tu clase de POJO contendrá claves de ambas respuestas.

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

Pero cuando use la clase Respuesta, tenga cuidado de que para la primera respuesta , el nombre y la ciudad serán nulos , y para la segunda , la dirección y el nombre completo .


Sí, puedes hacerlo en un solo POJO. Prueba esto:

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>(); }

Durante el análisis tienes que verificar los valores para null . Por ejemplo:

Mientras se analiza la Respuesta 1: las variables de nombre y ciudad serán nulas

Mientras se analiza la Respuesta 2: el nombre completo y la dirección serán nulos

Nota: intente verificar los valores en nulo antes de usarlos. De lo contrario, obtendrá nullpointerexception