Java сначала читает конечный узел большого файла JSON - PullRequest
0 голосов
/ 18 мая 2018

У меня большой JSON-файл размером около 65 МБ в формате ниже

{
"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"
        }
    }
}

}

Я использую Джексон для анализа большого файла. Я хочу прочитать узел Node1.3затем прочитайте Node1.1 и создайте объект POJO, который будет иметь все данные из массива Node1.1 и с каждым данным будут ассоциированы 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 голосов
/ 18 мая 2018

JSON - это формат для чтения вперед.Если вас не волнует какая-либо проверка того, что данные, которые вы читаете, действительно те, которые вы ожидали, а не совершенно другой объект, названный совершенно по-другому, то невозможно прочитать его с конца.

Организовать получение файлов JSON, которые организованы с данными, которые вам нужны в первую очередь.Установите предварительный анализ файлов, которые вы уже должны переписать, чтобы они использовали нужный вам порядок.Таким образом, на данный момент это будет иметь значение, вы сможете эффективно читать файл.

...