我遇到了gson的麻烦。 当我调用toJson()方法时,无论我做什么都会抛出StackOverflowError。
这是我正在尝试的代码段。
private Map<String, ArrayList<Integer>> mMap = new HashMap<String, ArrayList<Integer>>() {{
put("KEY_A", new ArrayList<Integer>( Arrays.asList(1,2,3)));
put("KEY_B", new ArrayList<Integer>( Arrays.asList(1,3,5)));
put("KEY_C", new ArrayList<Integer>( Arrays.asList(1,2,3)));
}};
Gson gson = new Gson();
public String getString() {
return gson.toJson(mMap);
}
我试图在调用toJson()方法时放入类型实参,例如:
Type type = new TypeToken<Map<String, Object>>(){}.getType();
public String getString() {
return gson.toJson(mMap, type);
}
并尝试了不同类型的配置,例如:
Type type = new TypeToken<Map<String, ArrayList<Integer>>>(){}.getType();
// Object -> ArrayList<Integer>
但根本不起作用。
任何评论将不胜感激。 谢谢!
答案 0 :(得分:0)
您可以使用GsonBuilder
对象启用复杂的映射键序列化。这是一个工作示例:
Map<String, ArrayList<Integer>> mMap = new HashMap<String, ArrayList<Integer>>() {
{
put("KEY_A", new ArrayList<Integer>(Arrays.asList(1, 2, 3)));
put("KEY_B", new ArrayList<Integer>(Arrays.asList(1, 3, 5)));
put("KEY_C", new ArrayList<Integer>(Arrays.asList(1, 2, 3)));
}
};
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.enableComplexMapKeySerialization().setPrettyPrinting().create();
Type type = new TypeToken<HashMap<String, ArrayList<Integer>>>(){}.getType();
System.out.println(gson.toJson(mMap, type));
它打印输出:
{
"KEY_A": [
1,
2,
3
],
"KEY_C": [
1,
2,
3
],
"KEY_B": [
1,
3,
5
]
}