0

Java オブジェクトで Json を解析し、フィールド (destination_addresses、origin_addresses、duration) を保存する必要があります。「期間」の値を取得できません。これは私が解析しなければならないjsonです:

{
   "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 + '}';
        }
        
        
    }

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

目的地: Blocco Palma Primo, 95121 Fattoria Sole Delfino CT, Italy

起源: Contrada Torre Allegra, 95121 Catania CT, Italy

期間{テキスト=null、値=0}

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

4

1 に答える 1

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 + '}';
    }


}
于 2016-12-03T16:49:48.390 に答える