0

我从 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;
    }
);
}

我如何访问数据?

4

2 回答 2

3

您的 JSON 代表一个字典,与键关联的值Respons是一个数组。该数组有一个对象,它本身就是一个字典。并且该字典有两个键,status并且uid.

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

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"];
于 2013-08-27T19:06:50.063 回答
1

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

self.response = [[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error] objectForKey:@"Respons"];
于 2013-08-27T19:06:58.220 回答