这一点显而易见,我做错了。我一直在撞墙,试图弄清楚发生了什么。我已经在我的应用程序的android版本中完成了这个json解析,现在尝试在xcode中解析这个简单的json并且无法完成它。
NSError *myError = nil;
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&myError];
NSLog([res objectForKey:@"Date"]);
这段代码让我得到了发送给实例的"无法识别的选择器"错误。
这是json数据,您可以看到Date是其中一个对象:
[{"Date":"2016-06-17T22:56:33.0811255-05:00"}]
提前感谢您对此问题的任何帮助。我试图简化这篇文章,但如果需要更多信息,我会尝试快速提供。
答案 0 :(得分:2)
JSONObjectWithData
返回一个字典数组,而不是字典。您打印出的原始JSON确认了这一点:
[{"Date":"2016-06-17T22:56:33.0811255-05:00"}] // This is an array
但是,您尝试将该响应对象视为字典。这样做就是在数组上调用字典方法(objectForKey:
)。这会导致崩溃。尝试这样的事情:
NSError *error = nil;
id responseObject = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&error];
if (error)
{
// Handle error
return;
}
NSLog(@"%@", responseObject);
if ([responseObject isKindOfClass:[NSArray class]])
{
NSArray *responseArray = (NSArray *)responseObject;
for (id item in responseArray)
{
NSLog(@"%@", item);
if ([item isKindOfClass:[NSDictionary class]])
{
NSDictionary *dictionary = (NSDictionary *)item;
NSString *dateString = [dictionary objectForKey:@"Date"];
NSLog(@"%@", dateString);
}
}
}
else
{
// responseObject is not an array...
}
答案 1 :(得分:0)
我很确定这是因为你应该首先将res设置为[NSDictionary]
。然后选择该数组中的第一个元素,然后获取objectForKey: "Date"
。普通JSON数据以{
开头,以[
开头。这意味着它是一个数组。
当它显示@:1 Element时,您可以在屏幕截图中看到它。然后它说1个键/值对。 NSDictionary位于array.NSError
中试试这段代码:
*myError = nil;
[NSDictionary] *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&myError];
if (res.count > 0) {
NSLog([res[0] objectForKey:@"Date"]);
}