iPhone:解析响应字典问题:

问题描述:

我正在为我的同步请求获取服务器响应和解析。iPhone:解析响应字典问题:

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

结果如下:

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

我试图分析上面的结果,如果是“OK”,那么我想存放“Datavalue”的地方.. 我想如下所示,

-(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"); 
     } 
    } 
} 

但是,它总是打印“无效响应”,但我的回答是“确定”。我在这里做错了什么?请指教!

谢谢!

您错过了接收到的字典中的嵌套层次。你的回应显示,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"); 
     } 
    } 
} 

似乎不可思议我,可能不是问题,但:这应该不是内已经完成了循环

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

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

。只要尝试for循环外的代码,它应该可以工作。你可能想要尝试的其他事情是调用isKindOfClass方法来覆盖@"response"的值,并且你应该得到一些说它是一个字符串的东西。