我正在为我的同步请求获得服务器响应和解析,如下所示。
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");
}
}
}
但是,它始终打印“INVALID RESPONSE”,但我的响应为“OK”。我在这做错了什么?请指教!
谢谢!
答案 0 :(得分:1)
您在收到的词典中缺少一定程度的嵌套。您的响应显示responseData包含一个名为“d”的键,其值是另一个字典,该字典具有一个名为“response”的键
因为您在循环中工作,我将假设您的响应可以在顶层包含多个值而不仅仅是“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");
}
}
}
答案 1 :(得分:0)
对我来说似乎很奇怪,可能不是问题但是:
value = (NSString*)[responsedata objectForKey:@"response"];
if ( [value isEqualToString:@"OK"] ){
NSLog(@"RESPONSE SUCCESS, need to store data value");
}
else{
NSLog(@"INVALID RESPONSE");
}
这不应该在for循环中完成。只需在for循环之外尝试该代码,它应该可以工作。您可能想要尝试的另一件事是在isKindOfClass
的值上调用@"response"
方法,您应该得到一些说它是字符串的内容。