1

経度と緯度から郵便番号を取得しようとしています。そのため、Google API を使用します。

これが私の要求です。

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 が必要です。

誰かがアイデアを得ましたか?

4

3 に答える 3

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;
            }
        }
    }
}
于 2013-02-27T10:57:36.583 に答える
1

キーが「long_name」の「3600」が必要なので、基本的には「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」) に置き換え、結果辞書で取得した配列の要素数をそこに配置する必要があります。

于 2013-02-27T10:34:27.643 に答える
0

この JSON を NSDictionary クラスにマップします。これから、address_components 配列にアクセスできます。

必要な値を取得するには、配列 objectAtIndex を使用します。

包括的なソリューションが必要な場合は、github で利用可能な抽象 KVC ラッパー クラスを使用してください。

これらは、JSON をモデル クラスに直接マップします。

マップしたら、これらのクラスの object.property を指定してアクセスできます。

于 2013-02-27T10:26:44.863 に答える