Java解析大型json
我想从OSM服务器解析json文件。它可能从几Kbs到10-20 Mbs不等。我现在正在使用GSON,但在解析大文件(比如10mbs)时,我面临一些性能问题。在流模式下进行解析仅需约10秒:Java解析大型json,java,json,parsing,openstreetmap,Java,Json,Parsing,Openstreetmap,我想从OSM服务器解析json文件。它可能从几Kbs到10-20 Mbs不等。我现在正在使用GSON,但在解析大文件(比如10mbs)时,我面临一些性能问题。在流模式下进行解析仅需约10秒: JsonReader reader = new JsonReader(new StringReader(data)); try { reader.beginObject(); while(reader.hasNext()){ String na
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();
}
JsonReader=newjsonreader(newstringreader(data));
试一试{
reader.beginObject();
while(reader.hasNext()){
字符串名称=reader.nextName();
if(name.equals(“元素”)){
reader.beginArray();
while(reader.hasNext()){
字符串类型=null;
长id=0L;
双lat=0D;
双lon=0D;
ArrayList节点=新的ArrayList();
Tags=null;
reader.beginObject();
while(reader.hasNext()){
name=reader.nextName();
交换机(名称){
案例“类型”:
type=reader.nextString();
打破
案例“标签”:
reader.beginObject();
while(reader.hasNext()){
name=reader.nextName();
如果(名称等于(“公路”))
tags=新标记(reader.nextString());
其他的
reader.skipValue();
}
reader.endObject();
打破
违约:
reader.skipValue();
打破
}
}
reader.endObject();
}
reader.endArray();
}
否则{
reader.skipValue();
}
}
reader.endObject();
reader.close();
}捕获(IOE异常){
e、 printStackTrace();
}
目前,它是我的应用程序的瓶颈。我已经尝试了其他一些库,但没有任何改进。有没有什么我做错了,或者有没有什么特殊的方法来解析大型json数据?json不是为快速解析而设计的(并且不是通常为OSM提供的文件类型)。也许你应该看看。虽然它是压缩的,但解析速度应该比JSON快 或者,不要重新发明轮子,而是使用诸如或之类的工具来解析OSM PBF或XML
另一个解决方案是为您感兴趣的确切元素类型创建请求。这样做的好处是,您要分析的文件只包含相关数据。也许您想告诉我们您要实现的目标。也许有更好的办法。在JS中解析原始OSM数据听起来是错误的。这是Java而不是JS。我想从给定区域的OSM中获取道路类型和一些其他基本数据。我正在使用OverpassAPI来获取唯一感兴趣的数据。感谢您提供有关PBF格式的信息。这可能是一个解决办法。