Question

Tout d'abord, désolé pour mon pauvre anglais.

Deuxièmement, mon problème.
J'essaie de convertir JSON et sauvegarder cette structure:

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

Je le fais avec ce 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);
}

Enfin, j'obtenir ce résultat:

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

Comme vous pouvez le voir, après convertation, les paramètres de type objet incorrect.
S'il vous plaît, pouvez-vous me dire, comment je peux résoudre ce trouble?

Merci d'avance!

Était-ce utile?

La solution

Essayez ceci et voir si elle fonctionne? Ouais, je sais que vous voulez soutenir le type de Object, mais cela est juste pour l'amour d'essayer.

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

[Modifié]

Maintenant, essayez cet extrait directement, avec un changement correspondant dans la classe Revision.

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

Modifier cette classe dans Revision à cela,

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

Ceci est pour vous assurer que son bon travail avec le type spécifique. Dans le cas contraire, nous ne manquerons pas qu'il ne peut pas fonctionner avec le type de Obejct en quelque sorte. Ensuite, vous pouvez déposer un bug là-bas, pour leur bien. Et pour l'instant, vous pouvez passer à une autre API, si vous le souhaitez. Vous pouvez trouver quelques options .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top