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

Single object json parse - what am I doing wrong?

这肯定是我做错了。我一直在用头撞墙试图弄清楚发生了什么。我已经在我的应用程序的 android 版本中完成了这个 json 解析,现在试图在 xcode 中解析这个简单的 json 但无法完成。

NSError *myError = nil;
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&myError];  
NSLog([res objectForKey:@"Date"]);

这段代码让我得到 "unrecognized selector sent to instance" 错误。

这是 json 数据,您可以看到 Date 是对象之一:

[{"Date":"2016-06-17T22:56:33.0811255-05:00"}]

在此先感谢您就此问题提供的任何帮助。我已尝试对此进行简化 post,但如果需要更多信息,我会尽快提供。

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

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...
}

我很确定这是因为您应该首先将 res 设置为 [NSDictionary]。然后选择该数组中的第一个元素,然后得到 objectForKey: "Date"。正常 JSON 数据以 { 开头,这个以 [ 开头。这意味着它是一个数组。

您可以在屏幕截图中亲眼看到 @: 1 Element 。然后它说 1 key/value 对。 NSDictionary 在 array.NSError

试试这个代码:

*myError = nil;
[NSDictionary] *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:&myError];

if (res.count > 0) {   
NSLog([res[0] objectForKey:@"Date"]);
}