2011-11-19 2 views
1

전에 json을 만지지 않았습니다. Melbourne에 대한 Wunderground 날씨 API 내의 일부 변수에 액세스하려고합니다. 예를 들어, "wind_dir": "East"변수에 액세스하려고한다고 가정 해 봅시다. 이것은 지금까지 내 코드입니다 :iPhone에서 Wunderground API json 조회

NSString *urlString = 
    [NSString stringWithFormat: 
    @"http://api.wunderground.com/api/key/geolookup/conditions/forecast/q/-33.957550,151.230850.json"]; 

    NSLog(@"URL = %@", urlString); 

    SBJsonParser *parser = [[SBJsonParser alloc] init]; 

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]; 

    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

    NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 

    NSArray *weatherInfo = [parser objectWithString:json_string error:nil]; 

    for (NSDictionary *weatherString in weatherInfo) 
    { 

     NSLog(@"some weather info = %@", [[[weatherString objectForKey:@"response"] objectForKey:@"current_observation"] objectForKey:@"wind_dir"]); 

    } 

내 코드는이 오류와 루프 충돌에 도달 : - [NSCFString objectForKey :] : 인식 할 수없는 선택기 인스턴스에 보냈다.

충돌을 일으키는 원인이 무엇인지, "wind_dir"변수에 대한 내 경로가 올바른지 여부는 100 % 확신 할 수는 없지만 동일한 문제 일 수 있습니다.

미리 도움을 청하십시오.

+0

내가 당신 인 경우 링크에서 개인 키를 제거합니다. – Tibidabo

+0

@Tibidabo 좋은 지적, 고마워. –

답변

2

"response"속성 또는 "current_observation"propery는 문자열이 아니라 사전입니다.

오류가 발생하면 문자열에서 "objectForKey"를 호출하려고합니다.

API의 결과를 살펴본 후에 배열을 가져 오지 못하는 것으로 보입니다.

은 다음과 같이해야합니다 : 대신의

NSDictionary *weatherInfo = [parser objectWithString:json_string error:nil]; 

    NSLog(@"some weather info = %@", [[weatherInfo objectForKey:@"current_observation"] objectForKey:@"wind_dir"]); 

을 문.

+0

매력처럼 작동했습니다. 고마워요! –