来自Instapaper API 文档:
Instapaper 字符串始终以 UTF-8 编码,并且 Instapaper 期望所有输入都使用 UTF-8。除非另有说明,否则每个方法的输出都是一个数组。默认情况下,输出数组以 JSON 形式返回。您可以指定带有回调函数名称的 jsonp 参数,例如 jsonp=myCallback,以使用 JSONP 并将输出包装在对指定函数的调用中。
所以你不可能得到无效的 JSON!
试试下面的代码:
NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL urlWithString:@"http://your-instapeper-API-link"] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
id serializationJSON = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
然后您可以记录错误或结果是否符合您的预期:
NSLog(@"class of JSON input: %@ \n and possible error: %@",[serializationJSON class],error);
当然,您应该期望 Array 并且没有错误。
编辑...基于评论代码:
根据文档,您应该获得 Array 或 Dictionary。请添加此核心而不是您的第 23 行(此处的编号):
if([JSON isKindOfClass:[NSDictionary class]]) {
NSDictionary *jsonDictionary = JSON;
NSLog(@"%@",[jsonDictionary allKeys]);
} else {
NSLog(@"JSON object class: %@",[JSON class]);
}
并请向我们展示输出。
还有一件事:
你从请求中得到数组。伟大的!这是一个有效的 JSON。所以你需要调试它。正如我所说,遗憾的是不是无限访问公共 API,所以我可以调查一下。但是现在你必须调试你的结果。我在您的代码中看到您正在尝试访问书签。所以我查看了文档中的书签部分,这是某种列表(NSArray)。所以如果你不知道你想要什么结果。您应该将它们打印到日志中(或设置断点)。用这个简单的日志替换我之前更新的代码:
NSDictionary *resultDictionary;
if([JSON isKindOfClass:[NSArray class]]) {
NSArray *jsonArray = JSON;
NSLog(@"so json is an array with %i objects",[jsonArray count]);
for(id objectInsideArr in jsonArray) {
NSLog(@"object in array [class]: %@ [value]: %@",[objectInsideArr class],objectInsideArr); //if here you find NSDictionary maybe is this dictionary you are looking for. I'm not sure what it is.
if([objectInsideArr isKindOfClass:[NSDictionary class]]) {
resultDictionary = [[NSDictionary alloc] initWithDictionary:objectInsideArr];
}
}
}