我从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;
}
);
}
如何访问数据?
答案 0 :(得分: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"];
答案 1 :(得分:1)
您的顶级对象不是数组,而是字典。您可以轻松绕过此并将该键的内容添加到阵列中。
self.response = [[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error] objectForKey:@"Respons"];