Неправильно конвертировать объект из JSON - PullRequest
0 голосов
/ 12 октября 2010

Во-первых, извините за мой плохой английский.

Во-вторых, моя проблема.
Я пытаюсь преобразовать в JSON и вернуть эту структуру:

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

Я делаю это с этим кодом:

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

В итоге я получаю такой результат:

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

Как видите, после преобразования неверные параметры типа объекта.
Пожалуйста, не могли бы вы сказать мне,как я могу исправить эту проблему?

Заранее спасибо!

1 Ответ

0 голосов
/ 12 октября 2010

Попробуйте и посмотрите, работает ли он?Да, я знаю, что вы хотите поддерживать тип Object, но это только для примера.

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

[Отредактировано]

Теперь попробуйте этот фрагмент напрямую, с соответствующим изменением в Revision классе.

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

Измените это в Revision классе на это,

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

Это сделано для того, чтобы убедиться, что он работает хорошо стип.Если это произойдет, мы будем уверены, что он не может работать с типом Obejct.Тогда вы можете подать ошибку там, для их блага.А пока вы можете переключиться на какой-нибудь другой API, если хотите.Вы можете найти несколько вариантов здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...