2010-10-12 3 views
0

Во-первых, извините за плохой английский.Неверный конвертировать объект из JSON

Во-вторых, моя проблема.
Я пытаюсь преобразовать 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=[{[email protected], [email protected]}]} 

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

Спасибо заранее!

+0

проблема toString() проблема? – vstoyanov

+0

Я так не думаю. Я пытаюсь сделать это: HashMap >> HMout = new HashMap >>(); HMout = (HashMap >>) test.getRev(). Clone(); System.out.println (((HMout.get ("метка")) получаем (0)) получить ("ID") ToString()...); И я получаю **[email protected]** как результат = ( – JackTheCat

ответ

0

Попробуйте это и посмотрите, работает ли он? Да, я знаю, что вы хотите поддерживать 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, если хотите. Вы можете найти несколько опций here.

+0

Я пытаюсь сделать это, но у меня есть ошибка здесь ** revision.setRev (HM); ** Если я изменил Object на String в редакции -type, вы работаете с кодом! – JackTheCat

+0

@ user473032: Проверьте мое добавление. –

+0

Adeel Ansari: Да, он работает правильно. Попробую найти другой API из вашей ссылки. Спасибо за помощь! – JackTheCat