单个对象json解析 - 我做错了什么?

时间:2016-06-18 21:32:15

标签: ios objective-c json xcode nsdictionary

这一点显而易见,我做错了。我一直在撞墙,试图弄清楚发生了什么。我已经在我的应用程序的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"}]

提前感谢您对此问题的任何帮助。我试图简化这篇文章,但如果需要更多信息,我会尝试快速提供。

http://i.stack.imgur.com/Y5fsT.png

2 个答案:

答案 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"]);
}