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

Java首先读取大型JSON文件的结束节点,java,json,java-8,jackson,Java,Json,Java 8,Jackson,我有一个大约65MB的大JSON文件,格式如下 { "Root Node": { "Node1": { "Node1.1": [{ "logLevel":"INFO" "count" : 20 },{ "logLevel":"DEBUG" "count" : 200 },{ "logLevel":"ERROR"

我有一个大约65MB的大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解析要读取节点1.3的大文件 然后读取Node1.1并创建一个POJO对象,该对象将包含Node1.1数组中的所有数据,并且fromDate和toDate将与每个数据相关联。如果我按顺序进行,我可以解析文件,但是节点1.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();
    }
}

}JSON是一种向前读取格式。除非您不关心任何类型的验证,即您正在读取的数据确实是您期望的数据,而不是一个名称完全不同的完全不同的对象,否则就不可能从最后读取它


安排接收包含您首先需要的数据的JSON文件。对已经重写的文件安装预解析,以便它们按照您需要的顺序使用。这样,在关键时刻,您将能够高效地读取文件。

是否对“键”中的节点名称进行了排序?@NeerajJain No its not sorteds因为Node1是Map的键,所以您可以稍微调整逻辑以实现您的愿望<代码>设置键=节点1.keySet();keys.toArray()[keys.size];//这一行将为您提供地图中的最后一个关键点@NeerajJain我已经更新了问题,说明了我如何解析文件,而且由于它是一个大型JSON,我无法将数据加载到内存中。这可能是解决方案,但我正在处理的文件是外部文件,重新安排文件将是一项开销