iPhone:解析响应字典的问题:

时间:2012-02-08 17:42:21

标签: iphone ios5 nsjsonserialization

我正在为我的同步请求获得服务器响应和解析,如下所示。

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”。我在这做错了什么?请指教!

谢谢!

2 个答案:

答案 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"方法,您应该得到一些说它是字符串的内容。