Frage

Als erstes sorry für mein schlechtes Englisch.

Zweitens, mein Problem.
Ich versuche convert zu JSON und diese Struktur zurück:

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

Ich mache es mit diesem Code:

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

ich dieses Ergebnis schließlich erhalten:

{"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}]}

Wie Sie sehen können, nach convertation, Objekt-Typ Parameter falsch.
Bitte, können Sie mir sagen, wie ich dieses Problem beheben kann?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Versuchen Sie diese und sehen, ob es funktioniert? Ja, ich weiß, Sie wollen Object Art unterstützen, aber das ist nur für try willen.

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]

Jetzt versuchen, diese Schnipsel direkt mit einer entsprechenden Änderung in Revision Klasse.

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

Ändern Sie diese in Revision Klasse dazu,

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

Dies ist, um sicherzustellen, dass seine Arbeits gut mit bestimmtem Typ. Ist dies der Fall, werden wir sicher sein, dass es nicht mit Obejct Typ arbeiten kann irgendwie. Dann können Sie einen Fehler gibt, für ihre gute Datei. Und für die Zeit, die du zu einem anderen API wechseln können, wenn Sie mögen. Sie können einige Optionen finden href="https://stackoverflow.com/questions/338586/a-better-java-json-library">.

scroll top