从JSON到HashMap的Gson <integer,myobject =“”>其中Integer在JSON对象中

时间:2016-04-03 16:17:56

标签: java json parsing hashmap gson

我有一个JSON字符串,我正在尝试解析为HashMap。

我的对象如下:

public class MyObject {

private int id;
private String text;
}

,JSON字符串如下所示:

objects:[
{"id":1, "text":"firsttext"},
{"id":2, "text":"secondtext"},
{"id":3, "text":"thirdtext"}
]

我如何巧妙地将其解析为HashMap&lt;整数,MyObject&gt;所以如果我要调用HashMap.get(2),那么包含“secondtext”的数组的第二个对象会返回吗?

现在我正在做的是

Type integerStringMap = new TypeToken<Map<Integer, MyObject>>(){}.getType();
HashMap<Integer, MyObject> objects = new Gson().fromJson(content, integerStringMap);

但是我得到了java.lang.NumberFormatException:对于输入字符串:“id”。

我感觉很无能为力,如何在没有循环的情况下解决这个问题,我真的希望有更聪明的方法来做到这一点。非常感谢任何帮助!

编辑:这是一段符合我想要的代码:

Type integerObjectList = new TypeToken<List<MyObject>>(){}.getType();

List<MyObject> cardList = new Gson().fromJson(jsonString, integerObjectList);

HashMap<Integer, MyObject> cardMap = new HashMap<Integer, MyObject>();
for (MyObject o : objectList) {
    objectMap.put(o.getId(), o);
}

如果没有for循环,我会想要这样做。

1 个答案:

答案 0 :(得分:0)

以下代码为我工作。也许您在创建内容方面存在问题&#39; ?

Gson gson = new GsonBuilder().setPrettyPrinting().create();

        String jsonStr = "[{'id':1, 'text':'firsttext'}," +
                "{'id':2, 'text':'secondtext'}," +
                "{'id':3, 'text':'thirdtext'}]";

        Type integerStringMap = new TypeToken<Collection<MyObject>>(){}.getType();
        Collection<MyObject> enums = gson.fromJson(jsonStr, integerStringMap);

        for(MyObject mo : enums){
            System.out.println(mo);
        }