我从API导入数据,该数据以JSONArrays内部的JSONArrays格式返回,具有6个深度级别。 为了从可能的最低级别检索数据,我当前正在从数组循环到数组,最后创建一个JSON对象。喜欢的东西:
JSONObject jsonObject = new JSONObject(result);
JSONObject resultSet = jsonObject.getJSONObject("result_set");
if (resultSet.has("field1")) {
JSONArray field1ResultSet = resultSet.getJSONArray("field1");
for (int i = 0; i < field1ResultSet.length(); i++) {
JSONObject field1Object = countriesResultSet.getJSONObject(i);
String field1 = field1Object.getString("field1Object");
JSONArray field2Array = field1Object.getJSONArray("field2");
for (int t = 0; t < field2Array.length(); t++) {
JSONObject field2Object = field2Array.getJSONObject(t);
String field2 = field2Object.getString("name");
JSONArray field3Array = field2Object.getJSONArray("field3");
for (int z = 0; z < field3Array.length(); z++) {
JSONObject field3Object = field3Array.getJSONObject(z);
String field3 = field3Object.getString("name");
String field3_2 = field3Object.getString("token");
JSONArray field4Array = field3Object.getJSONArray("field4");
for (int m = 0; m < field4Array.length(); m++) {
JSONObject field4Object = field4Array.getJSONObject(m);
String field4 = field4Object.getString("name");
JSONArray field5Array = field4Object.getJSONArray("field5");
for (int n = 0; n < field5Array.length(); n++) {
JSONObject field5Object = field5Array.getJSONObject(n);
String field5 = field5Object.getString("name");
JSONArray field6Array = field5Object.getJSONArray("field6");
for (int g = 0; g < field6Array.length(); g++) {
JSONObject field6Object = field6Array.getJSONObject(g);
String field6 = field6Object.getString("name");
JSONArray kpiValues = field6Object.getJSONArray("kpi_values");
JSONObject finalObject = new JSONObject();
finalObject.put("date", DATE);
finalObject.put("field1", field1);
finalObject.put("field2", field2);
finalObject.put("field3", field3);
finalObject.put("field3_2", field3_2);
finalObject.put("field4", field4);
finalObject.put("field5", field5);
finalObject.put("field6", field6);
然后我将这个JSONObject存储在JSONArray中以便稍后导出,这几乎就是这个过程。 这里的问题是被检索的信息太大,导致我在进程中途导致“线程中的异常”主“java.lang.OutOfMemoryError:Java堆空间”。 遗憾的是,没有任何逻辑可以通过页面或类似的方式发送数据,因此我非常有限。 有没有人对我如何处理这个问题有任何建议?
感谢您的时间
答案 0 :(得分:0)
OutOfMemoryError
表示JVM已预先分配给它的内存不足。
这通常是内存泄漏的情况,我不确定是这种情况。
您要导入的数据有多大?
使用这些JVM参数分配更多内存。
java -Xms1024M -Xmx1024M ...
1024M
可以根据需要进行调整。 -Xms
是初始堆大小,-Xmx
是最大堆
如果您使用的是Eclipse,则可以将它们添加到启动配置中。