Java首先读取大型JSON文件的结束节点

时间:2018-05-18 08:34:15

标签: java json java-8 jackson

我有一个大约65 MB以下格式的大型JSON文件

{
"Root Node": {
    "Node1": {
        "Node1.1": [{
            "logLevel":"INFO"
            "count" : 20
        },{
            "logLevel":"DEBUG"
            "count" : 200
        },{
            "logLevel":"ERROR"
            "count" : 2000
        }],
        "Node1.2": "",
        "Node1.3": {
            "fromDate": "2014-11-11T14:59:59",
            "toDate": "2014-11-11T14:00:00"
        }
    }
}

}

我正在使用Jackson来解析我想要读取节点Node1.3的大文件 然后读取Node1.1并创建一个POJO对象,它将包含Node1.1 Array中的所有数据,并且每个数据都与fromDate和toDate相关联。如果按顺序进行,我可以解析文件,但最后会读取Node1.3。

我使用下面的代码来解析文件

public class TempMain {

public static void main(String [] args) throws IOException, ParseException {
    JsonFactory jfactory = new JsonFactory();
    ObjectMapper mapper = new ObjectMapper();

    try(JsonParser jParser = jfactory.createParser(new File("/tmp/file.json"))) {
        // loop until token equal to "}"
        while (jParser.nextToken() != com.fasterxml.jackson.core.JsonToken.END_OBJECT) {
            String fieldname = jParser.getCurrentName();
            jParser.nextFieldName();

            if ("Node1.1".equals(fieldname)) {
                /** current token is "[", move next messages is array, loop until token equal to "]"
                 **/
                jParser.nextToken();
                while(jParser.nextToken() == com.fasterxml.jackson.core.JsonToken.START_OBJECT) {
                    // read everything from this START_OBJECT to the matching END_OBJECT
                    // and return it as a tree model ObjectNode
                    ObjectNode node = mapper.readTree(jParser);

                    // Logic to process the data

                }
            }
        }
        jParser.close();
    } catch(Exception e) {
       e.printStackTrace();
    }
}

}

1 个答案:

答案 0 :(得分:1)

JSON是一种前瞻性格式。除非您不关心任何类型的验证,即您正在阅读的数据实际上是您期望的数据,而不是完全不同的完全不同的对象,否则无法从最终读取它。 / p>

安排接收使用您首先需要的数据组织的JSON文件。安装对已有文件的预解析,以便重写它们,以便它们使用您需要的顺序。这样,在它重要的那一刻,你就能够有效地阅读文件。