【问题标题】:Wrong convert Object from JSON错误地从 JSON 转换对象
【发布时间】:2010-10-12 08:01:37
【问题描述】:

首先,对不起我的英语不好。

第二,我的问题。
我尝试转换为 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}]}

如您所见,转换后,对象类型参数不正确。
请告诉我,我该如何解决这个问题?

提前谢谢你!

【问题讨论】:

  • 我不这么认为。我尝试这样做: HashMap>> HMout = new HashMap>>(); HMout = (HashMap>>) test.getRev().clone(); System.out.println(((HMout.get("mark")).get(0)).get("id").toString());我得到 java.lang.Object@1c672d0 作为结果 =(

标签: java json object gson


【解决方案1】:

试试这个,看看它是否有效?是的,我知道你想支持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);

[已编辑]

现在直接尝试这个 sn-p,并在 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

【讨论】:

  • 我尝试这样做,但这里有错误 revision.setRev(HM); 如果我在 Revision-type 中将 Object 更改为 String,你的代码就可以工作了!
  • @user473032:检查我的附录。
  • Adeel Ansari:是的,它工作正常。我会尝试从您的链接中找到另一个 API。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多