我有一个巨大的JSON文件(1GB),它基本上是以下格式的对象数组
[{"x":"y", "p":"q"}, {"x1":"y1", "p1":"q1"},....]
我想解析这个文件,所有数据都没有加载到内存中
基本上我想得到例如:数组中的前1000个对象进行内存处理然后将接下来的1000个对象放入内存进程中,依此类推,读取所有数据。
是否有支持此用例的JSON库?我目前使用 Gson 。但是,当我调用gson.fromJson()
提前感谢您的帮助。
答案 0 :(得分:1)
看起来Gson有一个流API,这就是你想要的:https://sites.google.com/site/gson/streaming
答案 1 :(得分:1)
使用Jackson,您可以使用类似SAX的方法(流式传输)使用JsonParser
对象,在您的情况下,它将是这样的:
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();