2016-12-03 10 views
0

JsonをJavaオブジェクトで解析し、destination_addresses、origin_addresses、およびdurationの各フィールドを保存する必要があります。私は "期間"の値を取得することはできません。これは私が解析する必要がJSONです:DistanceMatrixからネストされた配列JsonをJavaに解析するGSONを使用したGoogle Api

{ 
    "destination_addresses" : [ "Blocco Palma Primo, 95121 Fattoria Sole Delfino CT, Italia" ], 
    "origin_addresses" : [ 
     "Unnamed Road, 95121 Catania CT, Italia", 
     "Blocco Palma Primo, 95121 Fattoria Sole Delfino CT, Italia", 
     "Contrada Torre Allegra, 95121 Catania CT, Italia", 
     "Contrada Pantano d'Arci, Catania CT, Italia", 
     "Unnamed Road, 95121 Catania CT, Italia", 
     "Via Cassia, 95121 Catania CT, Italia", 
     "Contrada Pantano d'Arci, Catania CT, Italia", 
     "Contrada Pantano d'Arci, Catania CT, Italia", 
     "Contrada Pantano d'Arci, Catania CT, Italia", 
     "Contrada Pantano d'Arci, Catania CT, Italia" 
    ], 
    "rows" : [ 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "2,0 km", 
        "value" : 2037 
       }, 
       "duration" : { 
        "text" : "4 min", 
        "value" : 266 
       }, 
       "status" : "OK" 
      } 
     ] 
     }, 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "1 m", 
        "value" : 0 
       }, 
       "duration" : { 
        "text" : "1 min", 
        "value" : 0 
       }, 
       "status" : "OK" 
      } 
     ] 
     }, 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "3,8 km", 
        "value" : 3768 
       }, 
       "duration" : { 
        "text" : "7 min", 
        "value" : 400 
       }, 
       "status" : "OK" 
      } 
     ] 
     }, 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "5,3 km", 
        "value" : 5304 
       }, 
       "duration" : { 
        "text" : "6 min", 
        "value" : 374 
       }, 
       "status" : "OK" 
      } 
     ] 
     }, 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "8,2 km", 
        "value" : 8239 
       }, 
       "duration" : { 
        "text" : "13 min", 
        "value" : 785 
       }, 
       "status" : "OK" 
      } 
     ] 
     }, 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "11,5 km", 
        "value" : 11486 
       }, 
       "duration" : { 
        "text" : "15 min", 
        "value" : 901 
       }, 
       "status" : "OK" 
      } 
     ] 
     }, 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "12,2 km", 
        "value" : 12226 
       }, 
       "duration" : { 
        "text" : "18 min", 
        "value" : 1099 
       }, 
       "status" : "OK" 
      } 
     ] 
     }, 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "12,2 km", 
        "value" : 12226 
       }, 
       "duration" : { 
        "text" : "18 min", 
        "value" : 1099 
       }, 
       "status" : "OK" 
      } 
     ] 
     }, 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "12,2 km", 
        "value" : 12226 
       }, 
       "duration" : { 
        "text" : "18 min", 
        "value" : 1099 
       }, 
       "status" : "OK" 
      } 
     ] 
     }, 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "12,2 km", 
        "value" : 12226 
       }, 
       "duration" : { 
        "text" : "18 min", 
        "value" : 1099 
       }, 
       "status" : "OK" 
      } 
     ] 
     } 
    ], 
    "status" : "OK" 
} 

そして、これは私が必要なフィールドを取得するには、Javaで試したものです。これらのクラスでは

public static void main(String[] args) throws Exception { 
     // TODO code application logic here 
     URL url = new URL(myUrl); 
     InputStreamReader reader = new InputStreamReader(url.openStream()); 
     SRD sr = new Gson().fromJson(reader, SRD.class); 

     System.out.println("destination: " + sr.destination_addresses.get(0)); 
     System.out.println("origins: " + sr.origin_addresses.get(2)); 
     System.out.println(sr.rows.get(2).elements.get(0).toString()); 



    } 

private class SRD { 
     List<String> destination_addresses; 
     List<String> origin_addresses; 
     List<elements> rows; 

    } 


    private class elements { 
     List<duration> elements; 

    } 

    private class duration { 
     String text; 
     int value; 


     public String toString() { 
      return "duration{" + "text=" + text + ", value=" + value + '}'; 
     } 


    } 

このコードを実行すると、次の出力が得られます。

destination: Blocco Palma Primo, 95121 Fattoria Sole Delfino CT, Italy

origins: Contrada Torre Allegra, 95121 Catania CT, Italy

duration{text=null, value=0}

明らかに、フィールドdestination_addressesとorigin_addressesの解析は正常に実行できますが、その期間は0とnullが与えられます。どこが間違っていますか?どのようにしてこの問題を解決し、持続時間の正しい値(テキストと値)を得ることができますか?お手伝いありがとうございます。

+0

「要素」は、フィールド期間(あるオブジェクトのテキスト/値)を持つオブジェクトで、期間のリストではありません。 http://www.jsonschema2pojo.org/あなたに役立つかもしれない –

+0

私のクラス "要素"の内容を 'duration duration;メインのprintlnを 'System.out.println(sr.rows.get(2).duration.toString());'実行はエラーで失敗します。スレッド "main"の_Exception例外NullPointerException \t、proveJson.SingleRouteParse.main(SingleRouteParse.java:35)_。私はNetbeansのヒントに従ってこのprintlnを書いています。 – Ennio

+0

jsonのためにリストを使用する前に、要素の後に角括弧[ – Ennio

答えて

0

ここで、Javaクラス名は、大文字で始まる必要があります。

オブジェクトにアクセスする際に問題がある場合は、getterメソッドを定義してください。

私は、どちらも同じ型と名前のプロパティを持っているため、長さと距離オブジェクトの別々のクラスを作成しませんでした。

private class SRD { 
    List<String> destination_addresses; 
    List<String> origin_addresses; 
    List<Row> rows; 

} 

private class Row{ 
    List<Element> elements; 

} 


private class Element { 
    General duration; 
    General distance; 
    String status; 

} 

private class General { 
    String text; 
    int value; 


    public String toString() { 
     return "duration{" + "text=" + text + ", value=" + value + '}'; 
    } 


} 
+0

ありがとう、私は私の問題を解決しました。私はあなたのことをどのように作ったのかと似たような方法でクラスを修正しましたが、うまくいきませんでした。今私は理由を理解しようとしますが、その間に私はあなたのおかげで解決しました。 – Ennio

+0

あなたは歓迎です – mismanc

+0

途中で何が問題でしたか? – mismanc

関連する問題