2016-08-23 25 views
1

特定のフィールドを抽出することはできません。私はJSON文字列を持っていると私はこのようになりますJSON文字列を持っている

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "Arad", 
       "short_name" : "Arad", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "Arad", 
       "short_name" : "Arad", 
       "types" : [ "administrative_area_level_2", "political" ] 
      }, 
      { 
       "long_name" : "Arad County", 
       "short_name" : "AR", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "Romania", 
       "short_name" : "RO", 
       "types" : [ "country", "political" ] 
      } 
     ], 
     "formatted_address" : "Arad, Romania", 
     "geometry" : { 
      "bounds" : { 
       "northeast" : { 
        "lat" : 46.2217118, 
        "lng" : 21.3823449 
       }, 
       "southwest" : { 
        "lat" : 46.1286902, 
        "lng" : 21.230371 
       } 
      }, 
      "location" : { 
       "lat" : 46.1865606, 
       "lng" : 21.3122677 
      }, 
      "location_type" : "APPROXIMATE", 
      "viewport" : { 
       "northeast" : { 
        "lat" : 46.2217118, 
        "lng" : 21.3823449 
       }, 
       "southwest" : { 
        "lat" : 46.1286902, 
        "lng" : 21.230371 
       } 
      } 
     }, 
     "place_id" : "ChIJw1lco0uYRUcRkYRVPkoHcA8", 
     "types" : [ "locality", "political" ] 
     } 
    ], 
    "status" : "OK" 
} 

私のJavaコード:

jsonString = readUrl("https://maps.googleapis.com/") 
rootNode = objectMapper.readTree(jsonString); 
JsonNode resultsNode = rootNode.path("results"); 
     JsonNode addressNode = resultsNode.path("address_components"); 
     JsonNode geometryNode = addressNode.path("geometry"); 
     JsonNode locationNode = geometryNode.path("location"); 
     JsonNode latNode = locationNode.path("lat"); 
     JsonNode lngNode = locationNode.path("lng"); 
     System.out.println(latNode.asDouble()); 
     System.out.println(lngNode.asDouble()); 

最後の2行印刷0.0 0.0。このjsonから緯度と経度情報を取得するにはどうすればよいですか? p.s完全URLリンクを投稿しませんでした。 jsonNodeが正しくない可能性がありますが、解決策が見つかりません。

+1

'geometry' ISN」 tを 'address_components'に入れます。 'JsonNode locationNode = resultsNode.path(" location ");'をコード化すべきではありません。 –

答えて

2

問題は、resultsはオブジェクトではなくオブジェクトの配列です。要素をインデックスで選択する必要があります。適切な解決策は以下のとおりです。

jsonString = readUrl("https://maps.googleapis.com/") 
rootNode = objectMapper.readTree(jsonString); 
JsonNode resultsNode = rootNode.path("results"); 
JsonNode addressNode = resultsNode.get(0); //selecting first json object from an array 
JsonNode geometryNode = addressNode.path("geometry"); 
JsonNode locationNode = geometryNode.path("location"); 
JsonNode latNode = locationNode.path("lat"); 
JsonNode lngNode = locationNode.path("lng"); 
System.out.println(latNode.asDouble()); 
System.out.println(lngNode.asDouble()); 

あなたはまた、各オブジェクトの座標を出力しますその場合のコードで、あるべき、結果内のすべてのオブジェクトを反復処理することもできます。

jsonString = readUrl("https://maps.googleapis.com/") 
rootNode = objectMapper.readTree(jsonString); 
JsonNode resultsNode = rootNode.path("results"); 
Iterator<JsonNode> results = resultsNode.elements(); 
while(results.hasNext()){ 
    JsonNode addressNode = results.next(); 
    JsonNode geometryNode = addressNode.path("geometry"); 
    JsonNode locationNode = geometryNode.path("location"); 
    JsonNode latNode = locationNode.path("lat"); 
    JsonNode lngNode = locationNode.path("lng"); 
    System.out.println(latNode.asDouble()); 
    System.out.println(lngNode.asDouble()); 
} 
+1

これは正解です。ありがとうございました! – lorrannd

関連する問題