2016-08-23 50 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獲取lat和lng信息? p.s我沒有發佈完整的網址鏈接。 也許jsonNodes不正確,但我找不到解決方案。

+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

相關問題