我使用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
帮助!!!
答案 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的初始化。它只是在下一行被覆盖和解除分配。