Java 如何使用json.simple解析大型json文件?

Java 如何使用json.simple解析大型json文件?,java,json,Java,Json,我是JSON新手,正在学习使用JSON.simple库。我试图解析一个大的json文件,但得到的只是“OutOfMemoryError:超出了GC开销限制”。如何解析大型json文件 这是我的代码: private static void fillPublications() throws FileNotFoundException, IOException, SQLException { JSONParser parser = new JSONParser(); try

我是JSON新手,正在学习使用JSON.simple库。我试图解析一个大的json文件,但得到的只是“OutOfMemoryError:超出了GC开销限制”。如何解析大型json文件

这是我的代码:

    private static void fillPublications() throws FileNotFoundException, IOException, SQLException {
    JSONParser parser = new JSONParser();
    try {



        String username = System.getProperty("user.name");
        String filename = "Datenbank";
        Object jsonData = parser.parse(new FileReader("C:\\Users\\" + username + "\\Desktop\\JSON\\" + filename + ".json"));

        ArrayList<String[]> list = new ArrayList<String[]>();

        JSONArray jsonArray = (JSONArray) jsonData;

        Iterator iterator = jsonArray.iterator();
        String name = "";
        Integer count = 0; 

        while (iterator.hasNext()) {
            String[] database = new String[11];
            JSONObject obj = (JSONObject) iterator.next();


            if(obj.containsKey("title")){
                database[0] = (String) obj.get("title");
            }
            if(obj.containsKey("year")){
                database[1] = obj.get("year").toString();
            }
            if(obj.containsKey("keywords")){
                JSONArray keywords = (JSONArray) obj.get("keywords");
                Iterator<String> i = keywords.iterator();
                String key = "";
                while (i.hasNext()) {
                    key = key + i.next() + "#";
                }
                if(key.length() > 0 && key.charAt(key.length()-1)=='#'){
                    key = key.substring(0, key.length()-1);
                }
                database[2] = key;
            }
            if(obj.containsKey("pages")){
                database[3] = (String) obj.get("pages");
            }
            if(obj.containsKey("volume")){
                database[4] = (String) obj.get("volume");
            }
            if(obj.containsKey("abstract")){
                database[5] = (String) obj.get("abstract");
            }
            if(obj.containsKey("identifiers")){
                JSONObject identifiers = (JSONObject) obj.get("identifiers");
                database[6] = (String) identifiers.get("doi");
            }
            if(obj.containsKey("type")){
                database[8] = (String) obj.get("type");
            }                
            if(obj.containsKey("authors")){
                JSONArray arr = (JSONArray) obj.get("authors");
                Iterator i = arr.iterator();
                while(i.hasNext()){
                    JSONObject authorObject = (JSONObject) i.next();
                    name = name + (String) authorObject.get("first_name") + " " + (String) authorObject.get("last_name") + "#";
                }
                if(name.length() > 0 && name.charAt(name.length()-1)=='#'){
                    name = name.substring(0, name.length()-1);
                }                    
                database[10] = name;                   
            }

            list.add(database);

            }
        System.out.println(Arrays.toString(list.get(0)));

    }catch (Exception e) {
        System.err.println(e);
    }
}

多大?我的意思是库应该能够处理一些相当大的东西。增加你的内存限制添加完整的堆栈跟踪,你的代码请。。。对不起,我刚刚编辑了我的PASTY,您可能想考虑使用String Bu建器,而不是使用<代码> +< /COD>进行字符串连接。这将有助于内存分配有多大?我的意思是库应该能够处理一些相当大的东西。增加你的内存限制添加完整的堆栈跟踪,你的代码请。。。对不起,我刚刚编辑了我的PASTY,您可能想考虑使用String Bu建器,而不是使用<代码> +< /COD>进行字符串连接。这将有助于内存分配
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.lang.StringBuffer.toString(StringBuffer.java:673)
    at org.json.simple.parser.Yylex.yylex(Yylex.java:598)
    at org.json.simple.parser.JSONParser.nextToken(JSONParser.java:269)
    at org.json.simple.parser.JSONParser.parse(JSONParser.java:118)
    at org.json.simple.parser.JSONParser.parse(JSONParser.java:92)
    at JSONExtraction.fillAuthors(JSONExtraction.java:39)
    at JSONExtraction.main(JSONExtraction.java:23)
C:\Users\b\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1