【发布时间】:2015-11-04 13:22:22
【问题描述】:
以前我的代码是这样的:
objJson = gson.toJson(objList);
return objJson;
我得到了带有该返回值的字符串 JSON。
但是当 JSON 变得太大时,我开始遇到著名的 Out Of Memory 错误。
然后我按照以下帖子将对象列表转换为 JSON 字符串以一种有效的方式,OOM 错误将不再存在:
https://sites.google.com/site/gson/streaming
所以,我在这里遵循了上述方法:
public String writeJsonStream(List<MyObj> objList) throws IOException {
ByteArrayOutputStream baos=new ByteArrayOutputStream();
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(baos,"UTF-8");
JsonWriter writer = new JsonWriter(outputStreamWriter);
writer.setIndent(" ");
writer.beginArray();
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().setPrettyPrinting().create();
for (MyObj myobj : objList) {
gson.toJson(myobj, MyObj.class, writer);
}
String objJson = writer.toString();
writer.endArray();
writer.close();
return objJson;
}
但是这个返回对象com.google.gson.stream.JsonWriter@6a9454cd。
gson.toJson(myobj, MyObj.class, writer); 方法是 void 类型,不返回 JSON 字符串。那么在这种情况下如何获取 JSON 字符串呢?
【问题讨论】: