2013-02-27 57 views
1

我試圖從經度和緯度檢索郵政編碼。因此我使用google API。獲取谷歌JSON之外的郵政編碼

這是我的要求。

http://maps.googleapis.com/maps/api/geocode/json?latlng=51.04166373133121,5.580196380615234&sensor=true

當你在你的瀏覽器中輸入這個,你會看到整個JSON。這只是它的一部分。

JSON文件

{ 

     "results": [ 
        { 
        "address_components": [ 
             { 
              "long_name": "2", 
              "short_name": "2", 
              "types": [ 
                "street_number" 
                ] 
             }, 
             { 
              "long_name": "Hermisweg", 
              "short_name": "Hermisweg", 
              "types": [ 
                "route" 
                ] 
             }, 
             { 
              "long_name": "Opglabbeek", 
              "short_name": "Opglabbeek", 
              "types": [ 
                "locality", 
                "political" 
                ] 
             }, 
             { 
              "long_name": "Limburg", 
              "short_name": "LI", 
              "types": [ 
                "administrative_area_level_2", 
                "political" 
                ] 
             }, 
             { 
              "long_name": "Vlaams Gewest", 
              "short_name": "Vlaams Gewest", 
              "types": [ 
                "administrative_area_level_1", 
                "political" 
                ] 
             }, 
             { 
              "long_name": "België", 
              "short_name": "BE", 
              "types": [ 
                "country", 
                "political" 
                ] 
             }, 
             { 
              "long_name": "3660", 
              "short_name": "3660", 
              "types": [ 
                "postal_code" 
                ] 
             } 
           ] 
         } 
       ] 
     } 

我的問題是現在我怎樣才能從這個JSON的郵政編碼嗎?在這個例子中,我想要3660作爲輸出。

有人有想法嗎?

+1

那麼你的問題是什麼?如何閱讀JSON?這與Google地圖無關。 – Marcelo 2013-02-27 10:30:14

+0

@Marcelo我知道如何閱讀json。但是我無法從JSON中獲取郵政編碼。 – Steaphann 2013-02-27 10:31:38

回答

2

試試這裏面connectionDidFinishLoading

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSString *thexml=[[[NSString alloc] initWithBytes:[webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding] autorelease]; 

    NSError *jsonError = nil; 
    id allValues = [NSJSONSerialization JSONObjectWithData:[thexml dataUsingEncoding:NSUTF8StringEncoding] 
                options:0 
                error:&jsonError]; 

    if(jsonError!=nil) 
     NSLog(@"JsonError: %@",jsonError); 


    NSArray *result = [(NSDictionary*)allValues objectForKey:@"results"]; 
    for(int i=0;i<[result count];i++) 
    { 
     NSDictionary *values = (NSDictionary*)[result objectAtIndex:i];       

     NSArray *component = [(NSDictionary*)values objectForKey:@"address_components"]; 

     for(int j=0;j<[component count];j++) 
     { 
      NSDictionary *parts = (NSDictionary*)[component objectAtIndex:j]; 
      if([[parts objectForKey:@"types"] containsObject:@"postal_code"]) 
      { 
       NSLog(@"Postal Code : %@ ",[parts objectForKey:@"long_name"]); 
       break; 
      } 
     } 
    } 
} 
+0

這工作!謝謝 ! – Steaphann 2013-02-27 11:07:51

0

將此JSON映射到NSDictionary類。從這裏你可以訪問address_components數組。

使用數組objectAtIndex獲取所需的值。

如果你需要一個全面的解決方案去在github上

提供這些直接映射到JSON模型類摘要KVC包裝類。

一旦映射,您可以通過指定這些類的object.property來訪問它們。

1

你想要「3600」的關鍵是「long_name」...所以你想要「long_name」基本上。

試試這個: -

假設你得到resultDict中的所有結果。

NSString *long_name = [[[[[resultDict objectForKey:@"results"] objectAtIndex:0] objectForKey:@"address_components"] objectAtIndex:0] objectForKey:@"long_name"]; 

NSLog(@"long_name is %@",long_name); 

注: - 您將不得不更換0在for循環的變量(例如「I」),放在那裏,你的結果字典得到數組元素的數量。

相關問題