我正在使用GitHub Job网络服务。以下是该服务的链接:https://jobs.github.com/api
现在我可以检索特定网址中的所有数据,例如:
@"http://jobs.github.com/positions.json?description=python&location=new+york"
我可以使用以下代码获取所有json数据:
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *urlString = @"http://jobs.github.com/positions.json?description=python&location=new+york";
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];
NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"%@", json);
// Do any additional setup after loading the view.
}
现在这很好,但是当我尝试这样做时:
NSArray *items = [[NSArray alloc] init];
items = json[@"description"];
NSLog(@"%@", items);
我收到了SIGABRT,我收到的错误如下:
JobSearch [1249:70b] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__ NSCFArray objectForKeyedSubscript:]:无法识别的选择器发送到实例0x8a82930'
我很困惑,因为我使用过的所有其他网络服务我都可以做这样的事情,“描述”应该是我应该能够抓住的项目。我似乎没有得到任何地方......
所有的帮助都表示赞赏,提前谢谢。
答案 0 :(得分:0)
首先它对你的数组alloc/init
没有意义,因为你用下一行立即覆盖它
NSArray *items = [[NSArray alloc] init];
items = json[@"description"];
此外,JSONObjectWithData
返回类型为id
的对象,但您将其分配给NSDictionary,这是一个被证明是错误的假设。
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
显然该方法返回一个数组,因此调用json[@"description"]
无效。您可以尝试使用它:
NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSString item = [json objectAtIndex:0]; // grab item from array
如果没有保证,它将起作用。我建议首先检查返回的对象类型,可能是isKindOfClass
,看看它是NSDictionary还是数组。