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"
的值,并且你应该得到一些说它是一个字符串的东西。