无法访问序列化的JSON数据(NSJSONSerialization)

时间:2013-08-27 19:01:54

标签: ios objective-c

我从Web服务获取此JSON:

{
    "Respons": [{
        "status": "101",
        "uid": "0"
    }]
}

我尝试使用以下内容访问数据:

NSError* error;

//Response is a NSArray declared in header file.
self.response = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

NSString *test = [[self.response objectAtIndex:0] objectForKey:@"status"]; //[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance
NSString *test = [[self.response objectForKey:@"status"] objectAtIndex:0]; //(null)

但是没有一个可以工作,如果我NSLog拿着序列化数据的NSArray,这就是我得到的:

{
Respons = (
    {
        status = 105;
        uid = 0;
    }
);
}

如何访问数据?

2 个答案:

答案 0 :(得分:3)

您的JSON代表一个字典,与Respons键关联的值是一个数组。那个数组有一个对象,本身就是一个字典。该字典有两个键,statusuid

因此,例如,如果您想提取状态,我相信您需要:

NSArray *array = [self.response objectForKey:@"Respons"];
NSDictionary *dictionary = [array objectAtIndex:0];
NSString *status = [dictionary objectForKey:@"status"];

或者,在最新版本的编译器中:

NSArray *array = self.response[@"Respons"];
NSDictionary *dictionary = array[0];
NSString *status = dictionary[@"status"];

或者,更简洁:

NSString *status = self.response[@"Respons"][0][@"status"];

答案 1 :(得分:1)

您的顶级对象不是数组,而是字典。您可以轻松绕过此并将该键的内容添加到阵列中。

self.response = [[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error] objectForKey:@"Respons"];