[英]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.