2012-02-08 4 views
0

동기 요청에 대한 서버 응답 및 구문 분석이 아래와 같습니다.iPhone : 응답 구문 분석 문제 :

NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonError]; 
NSLog(@"responseDict: %@", responseDict); 

결과는 다음과 같습니다 :

responseDict: { 
d =  { 
    Datavalue = 1; 
    "__type" = "Response:#DummyAPI"; 
    response = OK; 
}; 

나는 위의 결과를 분석하는 것을 시도하고, 그 다음 내가 .. 어딘가에 "Datavalue"를 저장할 내가 노력하고 "OK"인 경우

-(void) handleResponse :(NSDictionary *) responsedata // it is being passed from caller 
{ 
    NSString* value = NULL; 

    for (id key in responsedata) 
    { 
     value = (NSString*)[responsedata objectForKey:@"response"]; 

     if ([value isEqualToString:@"OK"]) 
     { 
      NSLog(@"RESPONSE SUCCESS, need to store data value"); 
     } 
     else 
     { 
      NSLog(@"INVALID RESPONSE"); 
     } 
    } 
} 

그러나 항상 "INVALID RESPONSE"가 인쇄되지만 "OK"로 응답됩니다. 여기서 내가 뭘 잘못하고 있니? 제발 조언 해!

감사합니다.

답변

1

받은 사전에 중첩 수준이 누락되었습니다. 귀하의 응답은 responseData에 "d"라는 키가 포함되어 있고 그 값은 다른 사전이며 그 사전은 "응답"이라는 키가있는 것입니다.

귀하의 회신 내용은 귀하의 답변에 포함될 수 있다고 가정합니다 "d"뿐만 아니라 최상위 레벨에서 여러 값을 사용하고 각각의 루프를 반복하려고합니다. 이 가정을 토대로 다음과 같은 것을 원할 것입니다 :

-(void) handleResponse :(NSDictionary *) responsedata // it is being passed from caller 
{ 
    NSString* value = NULL; 

    for (id key in responsedata) 
    { 
     NSDictionary *currentDict = (NSDictionary *) [responseData objectForKey:key]; 
     value = (NSString*)[currentDict objectForKey:@"response"]; 

     if ([value isEqualToString:@"OK"]) 
     { 
      NSLog(@"RESPONSE SUCCESS, need to store data value"); 
     } 
     else 
     { 
      NSLog(@"INVALID RESPONSE"); 
     } 
    } 
} 
0

나에게 이상한 것 같은데 아마 문제가 아니라입니다 :

value = (NSString*)[responsedata objectForKey:@"response"]; 

if ([value isEqualToString:@"OK"]){ 
    NSLog(@"RESPONSE SUCCESS, need to store data value"); 
} 
else{ 
    NSLog(@"INVALID RESPONSE"); 
} 

for 루프 내부에서 수행되지해야합니다. for 루프 외부에서 해당 코드를 시험해 보면 작동 할 것이다. 당신이 시도하고 싶은 다른 일은 @"response"의 값보다 isKindOfClass 메쏘드를 호출하는 것이고, 그것이 문자열이라는 것을 알게 될 것입니다.