我必须解析大型文本文件,其中包含多个用换行符分隔的json对象。再次,json对象体积很大,必须根据指定的Json路径进行解析,然后将其存储在DB中。
对于流文本文件,我正在使用apache commons LineIterator逐行读取。
示例:
LineIterator it = FileUtils.lineIterator(f, "UTF-8");
int i = 0;
while (it.hasNext()) {
readStream(it.nextLine());
}
对于流json对象,我更喜欢使用来自的JsonReader com.google.gson.stream.JsonReader。
示例:
Gson gson = new GsonBuilder().create();
JSONObject obj = new JSONObject(line);
JSONArray json_array = obj.getJSONArray("objectName");
JsonReader reader2 = new JsonReader(new
StringReader(json_array.toString()));
reader2.beginArray();
while (reader2.hasNext()) {
ObjectPOJO orgTree = gson.fromJson(reader2, ObjectPOJO.class);
.../ Do something with the object
}
reader2.endArray();
reader2.close();
但是这里需要担心的是,当我逐行读取文件时,整行都被读入内存,并且使用gson流没有任何意义(因为已将json对象的行已加载到内存中)。
将文件流与JsonReader一起使用:
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
将无济于事,因为行的大小未知,并且每行都是一个json对象。
有人能建议用什么方法更好地同时传输文件和json对象吗?
感谢您的帮助。
谢谢