2017-08-08 12 views
-1

OSMサーバーからjsonファイルを解析したいと思います。数Kbsから10-20Mbsまで変化する可能性があります。私は現在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データを解析する特別な方法がありますか?

+0

あなたが達成しようとしていることを教えてください。より良い方法があるかもしれません。 JSで生のOSMデータを解析するのは間違っている。 – scai

+0

JSはJSではありません。私は与えられた分野でOSMから道のタイプと他の基本的なデータを得たいと思っています。 – KamCho

答えて

2

JSONは高速解析用に作成されていません(OSM用に通常提供されるファイルタイプはありません)。たぶんOSM PBFをご覧ください。圧縮されていますが、JSONより解析が速くなければなりません。

また、ホイールを再作成する代わりに、OSM PBFまたはXMLの解析にosmiumまたはosmosisなどのツールを使用してください。

もう1つの解決策は、興味のある正確な要素タイプの要求をOverpass APIに作成することです。これは、解析するファイルに関連するデータのみが含まれるという利点があります。

+0

私はOverpass APIを使用して興味深いデータだけを取得しています。 PBF形式についての情報をありがとう。それは解決策かもしれません。 – KamCho

関連する問題