我有一个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<整数,MyObject>所以如果我要调用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循环,我会想要这样做。
答案 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);
}