无法访问NSDictionary

时间:2012-06-23 20:58:29

标签: ios json object dictionary key

我使用PHP脚本创建了一个JSON。 我正在阅读JSON,可以看到数据已被正确读取。 但是,当涉及到访问对象时,我会将无法识别的选择器发送到实例...

似乎无法找到为什么在过了几个小时之后。任何帮助都会很棒!

我的代码看起来像这样:

NSDictionary *json = [[NSDictionary alloc] init];
json = [NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions error:&error];

NSLog(@"raw json = %@,%@",json,error);  

NSMutableArray *name = [[NSMutableArray alloc] init];

[name addObjectsFromArray: [json objectForKey:@"name"]];

当到达上面的最后一行时代码崩溃。

输出如下:

raw json = (
        {
        category = vacancies;
        link = "http://blablabla.com";
        name = "name 111111";
        tagline = "tagline 111111";
    },
        {
        category = vacancies;
        link = "http://blobloblo.com";
        name = "name 222222222";
        tagline = "tagline 222222222";
    }
),(null)
2012-06-23 21:46:57.539 Wind expert[4302:15203] -[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0xdcfb970

帮助!!!

2 个答案:

答案 0 :(得分:2)

json是一个来自你所展示的数组,而不是字典。我可以告诉这个,因为围绕json的整个日志输出的括号。数组内部是字典,我可以通过它们被括号括起来来判断。

所以,看起来你想要这样的东西:

NSError *error = nil;
NSArray *json = [NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions error:&error];

NSLog(@"raw json = %@,%@",json,error);  

NSMutableArray *name = [[NSMutableArray alloc] init];
for (NSDictionary *obj in json) {
    [name addObject:[obj objectForKey:@"name"]];
}

除此之外,您会注意到我已经删除了json对对象的不必要的初始化,然后在JSONObjectWithData:options:error:的下一行中覆盖。在一个ARC世界中,它不会是一个泄漏,但是仍然完全没有必要分配一个对象只是为了稍后再次摆脱它。我也添加了NSError *error = nil;行,因为那里不存在,显然有必要编译。

答案 1 :(得分:1)

问题似乎是JSON的根级别是一个数组,而不是一个字典(注意括号而不是花括号作为记录输出中的第一个字符)。数组没有objectForKey选择器。也许您打算首先使用objectAtIndex:0,否则迭代所有项目?

顺便说一下,代码的第一行会完全浪费NSDictionary的初始化。它只是在下一行被覆盖和解除分配。