Ich möchte JSON-Datei von OSM-Servern analysieren. Es kann von wenigen Kbs zu 10-20 Mbs variieren. Ich verwende gerade GSON, aber ich habe einige Performance-Probleme, wenn große Dateien (wie 10 MB) analysiert werden. Es dauert etwa 10 Sekunden nur für im Streaming-Modus-Analyse:Java Parsing große 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();
}
Für jetzt ist es ein Engpass für meine Anwendung ist. Ich habe schon einige andere Bibliotheken ausprobiert, aber es gab keine Verbesserung. Gibt es irgendetwas, was ich falsch mache oder gibt es eine spezielle Möglichkeit, große json-Daten zu parsen?
Vielleicht möchten Sie uns sagen, was Sie erreichen möchten. Es könnte bessere Möglichkeiten geben. Das Parsen roher OSM-Daten in JS klingt falsch. – scai
Es ist Java nicht JS. Ich möchte Arten und einige andere grundlegende Daten von OSM in gegebenem Bereich bekommen. – KamCho