我想解析來自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