我想导入5 GB大小的JSON文件,但是它显示了一个Out of memory
错误。
我通过放置-Xmx7700m -Xms7700m -XX: + UseConcMarkSweepGC
来设置JVM,因为我知道我的计算机中有8 GB RAM,但是程序执行需要45分钟,然后显示此错误:
我正在使用Maven流行性“ com.googlecode.json-simple”版本:1.1.1
线程“主”中的异常java.lang.OutOfMemoryError:GC开销 超出限制java.lang.OutOfMemoryError:Java堆空间//如果我放 -Xmx5000m -Xms5000m
这是导入JSON文件的代码
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader("url.json"));
JSONObject jsonObject = (JSONObject) obj;
System.out.println(jsonObject);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
我可以找到另一种解决方案来将JSON文件分为多个部分并逐个导入吗?
答案 0 :(得分:1)
假设您的JSON文件是一大堆JSON对象,这可以为您提供帮助吗?:
import com.google.gson.stream.JsonReader;
import org.json.simple.JSONObject;
...
JsonReader jsonReader = new JsonReader(new InputStreamReader(new FileInputStream(theFile), StandardCharsets.UTF_8));
jsonReader.beginArray();
Gson gson = new GsonBuilder().create();
while (jsonReader.hasNext()) {
JSONObject currentJsonObject = gson.fromJson(jsonReader, JSONObject.class);
// do stuff
}
jsonReader.close();
答案 1 :(得分:0)
// Create a mapper model class according with your JSON file fields. I gave an example.
public class JsonToJavaObject {
@SerializedName("Id")
@Expose
private Integer id;
@SerializedName("Name")
@Expose
private String name;
// Getter/Setter
}
// Create file from your JSON
File file = new File("url.json"); // Make sure your file name and location
// Make an input stream for the file's data
BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
InputStreamReader inputStreamReader = new InputStreamReader(buf, StandardCharsets.UTF_8);
// Read stream of data
try (JsonReader jsonReader = new JsonReader(inputStreamReader)) {
Gson gson = new GsonBuilder().create();
// Create JSON object
JsonToJavaObject = gson.fromJson(jsonReader, JsonToJavaOnline.class);
} catch (Exception e) {
e.getMessage();
}