0

我使用 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

帮助 !!!

4

2 回答 2

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;行,因为那不存在并且显然是编译所必需的。

于 2012-06-23T21:13:53.483 回答
1

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

顺便说一句,代码的第一行完全浪费了 NSDictionary 的初始化。它只是在下一行被覆盖和释放。

于 2012-06-23T21:12:14.217 回答