Domanda

In primo luogo, mi dispiace per il mio povero inglese.

In secondo luogo, il mio problema.
Ho cercando convertito al JSON e sostenere tale struttura:

class Revision{
    private String auth;
    private HashMap<String, List<HashMap<String, Object>>> rev;

    public String getAuth(){
        return auth;
}

    public HashMap<String, List<HashMap<String, Object>>> getRev(){
        return rev;
}

    public void setAuth(String auth){
        this.auth = auth;
}

    public void setRev(HashMap<String, List<HashMap<String, Object>>> rev){
        this.rev = (HashMap<String, List<HashMap<String, Object>>>) rev.clone();
}

    public String toString(){
        return "Auth: " + auth + ", rev: " + rev;
}
}

lo faccio con questo codice:

public static void main (String[] argc){
    Gson gson = new Gson();
    Revision revision = new Revision();

    HashMap<String, List<HashMap<String, Object>>> HM = new HashMap<String, List<HashMap<String, Object>>>();
    List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
    HashMap<String, Object> HMin = new HashMap<String, Object>();

    HMin.put("id", 12);
    HMin.put("type", "toster");
    list.add(HMin);
    HM.put("mark", list);

    revision.setRev(HM);
    revision.setAuth("ololo");

    String json = gson.toJson(revision);

    Revision test = new Gson().fromJson(json, Revision.class);

    System.out.println(json);
    System.out.println(revision);
    System.out.println(test);
}

In finalmente ottengo questo risultato:

{"auth":"ololo","rev":{"mark":[{"id":12,"type":"toster"}]}}
Auth: ololo, rev: {mark=[{id=12, type=toster}]}
Auth: ololo, rev: {mark=[{id=java.lang.Object@1c672d0, type=java.lang.Object@19bd03e}]}

Come si può vedere, dopo convertation, i parametri oggetto di tipo errato.
Ti prego, mi puoi dire, come posso risolvere questo problema?

Grazie in anticipo!

È stato utile?

Soluzione

Prova questo fuori e vedere se funziona? Sì, lo so che si desidera supportare tipo Object, ma questo è solo per amor prova.

Gson gson = new Gson();
Revision revision = new Revision();

HashMap<String, List<HashMap<String, String>>> HM = new HashMap<String, List<HashMap<String, String>>>();
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
HashMap<String, String> HMin = new HashMap<String, String>();

HMin.put("id", "12");
HMin.put("type", "toster");
list.add(HMin);
HM.put("mark", list);

revision.setRev(HM);
revision.setAuth("ololo");

String json = gson.toJson(revision);

Revision test = new Gson().fromJson(json, Revision.class);

System.out.println(json);
System.out.println(revision);
System.out.println(test);

[Edited]

Ora provate questo frammento di codice direttamente, con un rispettivo cambiamento in classe Revision.

Revision test = new Gson().fromJson("{\"auth\":\"ololo\",\"rev\":{\"mark\":[{\"id\":12,\"type\":13}]}}", Revision.class);
System.out.println(test);

Cambia questo in classe Revision a questo,

HashMap<String, List<HashMap<String, Integer>>> HM = new HashMap<String, List<HashMap<String, Integer>>>();

Si tratta di fare in modo che il suo buon funzionamento con tipo specifico. Se lo fa, saremo sicuri che non può funzionare con il tipo di Obejct in qualche modo. Poi si può aprire un bug lì, per il loro bene. E per il momento si può passare a qualche altra API, se vi piace. Potete trovare alcune opzioni qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top