Gson – Leggere un valore con due diverse chiavi

Nel mio progetto android ho due tipi di risposta in cui entrambe le risposte sono identiche, tranne due chiavi .

Risposta 1

  • Il menu della barra delle azioni mostra lo schermo distriggersto
  • Come aggiornare l'anteprima in Android Studio 2.2?
  • Non ricevere una risposta corretta del servizio Web SOAP Programmaticamente
  • Utilizzo dell'API di Google Libri in Android
  • Android Intent Security
  • Singola animation - Viste multiple
  • {"fullName":"William Sherlock Scott Holmes","address":"221B Baker Street, London, England, UK","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]} 

    Risposta 2

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

    Se vedi le risposte solo due nomi di chiavi cambiano fullName / nome e indirizzo / città

    Non voglio creare un altro pojo per un'altra risposta. Ora la mia domanda è, è ansible usare solo un Pojo per leggere entrambe le risposte.

     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 } 

    Qualsiasi aiuto sarà apprezzato…

  • : app: dexDebug ExecException finito con valore di output non zero 0
  • Spinner non popolare e non imposterà arraysadapter
  • Trasferimento dati sincrono USB di Android
  • Come cancellare una notifica in Android
  • Distenda l'altezza di drawableLeft e drawableRight all'altezza di TextView
  • L'applicazione è configurata male per il login di Facebook - non restituendo il logcat, dopo aver impostato ENABLE_LOG su true in util.java
  • 4 Solutions collect form web for “Gson – Leggere un valore con due diverse chiavi”

    È ansible annotare i membri per accettare valori da due diversi nomi di json utilizzando l'annotazione @SerializedName :

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

    Quindi, l'elemento denominato può essere inserito nei membri che sono così annotati.

    AGGIORNAMENTO: @SerializedName sostituisce i nomi quando la deserializzazione viene aggiunta nella versione 2.4

    Sì, puoi utilizzare totalmente una class POJO per deserializzare entrambe le risposte. La class POJO contiene chiavi da entrambe le risposte.

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

    Ma quando si utilizza la class Response, fai attenzione che per la prima risposta il nome e la città saranno nulli , e per il secondo l' indirizzo e il nome completo .

    Si può farlo in un solo POJO. Prova questo:

     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 l'analisi è necessario controllare i valori per null . Per esempio –

    Mentre Parsing Response 1: le variables nome e città saranno nulle

    Mentre Parsing Response 2: il nome e l' indirizzo completo saranno nulli

    Nota: Prova a controllare i valori per null prima di utilizzare altrimenti otterrai nullpointerexception

    Definire tutti i campi possibili nella class POJO come

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

    Durante l'esecuzione del controllo dell'operazione per null in quelle windows

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.