我想解析来自OSM服务器的json文件。它可能从几Kbs到10-20 Mbs不等。我现在正在使用GSON,但在解析大文件时(例如10 Mbs),我正面临一些性能问题。仅在流模式下解析大约需要10秒钟:Java解析大json
JsonReader reader = new JsonReader(new StringReader(data));
try {
reader.beginObject();
while(reader.hasNext()){
String name = reader.nextName();
if(name.equals("elements")){
reader.beginArray();
while(reader.hasNext()){
String type = null;
Long id = 0L;
Double lat = 0D;
Double lon = 0D;
ArrayList<Long> nodes = new ArrayList<>();
Tags tags = null;
reader.beginObject();
while(reader.hasNext()) {
name = reader.nextName();
switch (name) {
case "type":
type = reader.nextString();
break;
case "tags":
reader.beginObject();
while (reader.hasNext()) {
name = reader.nextName();
if (name.equals("highway"))
tags = new Tags(reader.nextString());
else
reader.skipValue();
}
reader.endObject();
break;
default:
reader.skipValue();
break;
}
}
reader.endObject();
}
reader.endArray();
}
else{
reader.skipValue();
}
}
reader.endObject();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
现在它是我的应用程序的瓶颈。我已经尝试了一些其他的图书馆,但没有任何改善。有什么我做错了吗?还是有一些特殊的方法来解析大型JSON数据?
也许你想告诉我们你想达到的目标。可能有更好的方法可用。在JS中解析原始OSM数据听起来不对。 – scai
这是Java而不是JS。我想在给定的区域获得OSM的路径类型和其他一些基本数据。 – KamCho