我正在尝试解析Huuuge JSON文件并将其转换为CSV。 JSON文件包含许多对象,这些对象之间用''(空格)分隔。对象甚至不包含在列表“ [{...},{...}]”中 这是一个对象类型。在文件中,有成千上万个彼此跟随: {“ name”:“ cmp1”,“ homepage_url”:“ http://google.fr”,“员工人数”:0.0,“ founded_year”:0.0,“ founded_month”:0.0,“ founded_day”:0.0,“ deadpooled_year”:0.0 ,“ total_money_raised”:“ 5000”}
查找每个字符,并使用“ {”和“}”的数字查找JSON中的对象。但这太慢了。
RandomAccessFile raf = new RandomAccessFile(JsonInputFilePath, "rw");
int now = 0;
int open =0;
int close = 0;
String currentNode = "";
long length = raf.length();
while(length > now) {
currentNode = currentNode + (char)raf.readByte();
raf.seek(now);
now++;
char currentChar = (char)raf.readByte();
if( currentChar == '{') {
open ++;
}
if( currentChar == '}') {
close = close +1;
if(close == open) {
open = 0;
close = 0;
JsonReader reader = new JsonReader(new StringReader(currentNode));
//process data with the Json reader -><-
}
}
}
我希望每次找到一个完整的对象时都能够处理数据。这是一个非常大的文件(150mo)。因此,一次性阅读所有内容是不可能的。
答案 0 :(得分:0)
文件解析与json解析分开
public void processObject(String json) {
System.out.println(json);
}
public void read(String file) throws IOException {
try (FileReader r = new FileReader(file)) {
int i;
int level = 0;
StringBuilder sb = new StringBuilder();
while((i = r.read()) != -1) {
char c = (char)i;
switch(c) {
case '{':
sb.append(c);
level++;
break;
case '}':
sb.append(c);
level--;
if (level == 0) {
processObject(sb.toString());
sb = new StringBuilder();
}
break;
default:
if (level > 0) {
sb.append(c);
}
else {
// Ignore chars between objects
}
}
}
}
}