我正在尝试使用以下代码访问字典的内容,但由于某种原因无法使其工作。
NSLog(@"self.userCommentsArray %@",self.userCommentsArray);
返回null
感谢您的帮助。
NSData *jsonData = [NSData dataWithContentsOfURL:myURL];
NSDictionary *userCommentsDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
NSLog(@"userCommentsDictionary %@",userCommentsDictionary); // this works
self.userCommentsArray = [[userCommentsDictionary objectForKey:@"from"] objectForKey:@"name"];
NSLog(@"self.userCommentsArray %@",self.userCommentsArray);
这是字典的nslog输出:
userCommentsDictionary {
data = (
{
created = "2013-07-16T18:42:56+02:00";
from = {
id = 27;
name = "user-4";
};
id = 2553;
message = "liquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum";
},
{
created = "2013-07-16T18:42:56+02:00";
from = {
id = 28;
name = "user-5";
};
id = 2554;
message = "x ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum";
},
{
created = "2013-07-19T16:18:56+02:00";
from = {
id = 24;
name = "user-1";
};
id = 5125;
message = test comment;
},
{
created = "2013-07-19T17:00:21+02:00";
from = {
id = 24;
name = "user-1";
};
id = 5126;
message = "test comment ";
}
);
meta = {
totalCount = 18;
};
}
答案 0 :(得分:4)
userCommentsDictionary
有一个条目,密钥为data
。该值是一个数组。
你需要这样的东西:
NSArray *data = userCommentsDictionary[@"data"];
NSDictionary *firstComment = data[0];
NSDictionary *from = firstComment[@"from"];
NSString *name = from[@"name};
self.userCommentsArray = name;
这假设您需要第一条评论中的数据。根据需要进行调整。
注意许多中间变量的用户。这使您的代码更易于阅读和调试。避免这样的行:
self.userCommentsArray = userCommentsDictionary[@"data"][0][@"from"][@"name"];
这很难调试。
更新:如果你真的想要一个包含所有名字的数组,那么你可以这样做:
NSArray *data = userCommentsDictionary[@"data"];
NSArray *names = [data valueForKeyPath:@"from.name"];
self.userCommentsArray = names;
答案 1 :(得分:0)
您缺少@"data"
密钥,这是json响应的根。我假设您想获取所有名称,因此您可以执行此类操作。
NSArray *data = userCommentsDictionary[@"data"];
// data array is an array of dicionaries
NSArray *from = [data valueForKey:@"from"];
//from array will fetch all "from" dictionaries
NSArray *names = [from valueForKey:@"name"];
// names array will contain all names
答案 2 :(得分:-1)
我认为您需要在某个索引处从数组中访问对象,然后您可以从中选择名称字段。例如:
self.userCommentsArray = [userCommentsDictionary objectForKey:@"data"];
id someObject = [self.userCommentArray objectAtIndex:0] // or some other index
NSString *name = [someObject valueForKey:@"name"];