簡體   English   中英

JSON解析器從大型JSON文件逐項讀取條目

[英]JSON parser read an entry by entry from large JSON file

我有一個巨大的JSON文件(1GB),基本上是以下格式的對象數組

[{"x":"y", "p":"q"}, {"x1":"y1", "p1":"q1"},....]

我想解析此文件,以便所有數據都不會加載到內存中。
基本上,我想獲取例如:數組中的前1000個對象對其進行內存處理,然后將其后的1000個對象進入其處理內存,依此類推,直到讀取所有數據。
是否有支持此用例的JSON庫? 我目前使用Gson 但是,當我調用gson.fromJson()時,它將所有數據加載到內存中

在此先感謝您的幫助。

看起來Gson擁有您想要的流API,即: https : //sites.google.com/site/gson/streaming

使用Jackson,您可以使用JsonParser對象使用類似於SAX的方法(流式傳輸),在您的情況下,將是這樣的:

JsonFactory jsonFactory = new JsonFactory();
JsonParser parser = jsonFactory.createParser(new File("/path/to/my/jsonFile"));

// Map where to store your field-value pairs per object
Map<String, String> fields = new HashMap<String, String>();

JsonToken token;
while ((token = parser.nextToken()) != JsonToken.END_ARRAY) {
    switch (token) {

        // Starts a new object, clear the map
        case START_OBJECT:
            fields.clear();
            break;

        // For each field-value pair, store it in the map 'fields'
        case FIELD_NAME:
            String field = parser.getCurrentName();
            token = parser.nextToken();
            String value = parser.getValueAsString();
            fields.put(field, value);
            break;

        // Do something with the field-value pairs
        case END_OBJECT:
            doSomethingWithTheObject(fields)
            break;
        }
    }
    parser.close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM