2012-08-03 142 views
1

我收到一个JSON对象是这样的:JSONKit解析问题

{"data":null, 
"error":1, 
"error_code":"InvalidSID", 
"sid":"", 
"num_rows_total":0, 
"last_insert_id":0, 
"error_info":"Comment...", 
"error_data":[]} 

和使用JSONKit此代码:

NSString *responseString = [request responseString]; 
NSDictionary *requestDictionary = [responseString objectFromJSONString]; 
if([[requestDictionary objectForKey:@"error"] intValue]) { 
    if([@"InvalidSID" isEqualToString:[requestDictionary objectForKey:@"error_code"]]) { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 

产生这样的输出:

{ 
data = "<null>"; 
error = 1; 
"error_code" = InvalidSID; 
"error_data" =(); 
"error_info" = "Comment..."; 
"last_insert_id" = 0; 
"num_rows_total" = 0; 
sid = ""; 
} 

问题是,此if声明从未被调用,因为在InvalidSID周围缺少引号。是否有任何已知的JSONKit问题使得这些引号消失?

+0

看到这可能会帮助你http://stackoverflow.com/questions/9012942/parsing-json-response-with-multiple-objects – Shruti 2012-08-03 12:08:02

+1

我不太清楚它应该如何帮助我,因为我只有“级别“的JSON对象.. – Michal 2012-08-03 12:29:34

回答

0

您正在混淆NSDictionary的“description”输出和密钥的值。通过使用一些简单的侦探工作,你也可以为自己节省很多时间(这是你发布时间得到回应的时间)。

我认为你所说的“输出”以上是

NSLog(@"%@", requestDictionary); 

结果让行之后试试这个:

// Just to be complete 
    id ee = [requestDictionary objectForKey:@"error"]; 
    NSLog(@"error=%@ intValueOfError=%d classOfErrorCode=%@", 
     ee, [ee intValue], NSStringFromClass([ee class])); 

// Where I suspect you may discover something 
    id ec = [requestDictionary objectForKey:@"error_code"]; 
    NSLog(@"errorCode=%@ classOfErrorCode=%@", 
     ec, NSStringFromClass([ec class])); 

我们会这样做的,因为事情显然是错在这里,我们想要了解更多关于我们掌握的物品的信息。我会猜测你是否做了以上的事情,你会发现一些你没有想到的事情。

+0

我没有调用NSLog,但我相信它与持有断点时调用'po requetDictionary'相同。事情是,解析器实际上很好,它是控制台打印时髦的东西。我的程序实际上是因为弹出视图控制器而崩溃,因为它出现了,而不是因为'if'不会发生(我忽略了错位的断点,因此 - “如果语句从不会因为缺少引号而被调用”)。但感谢有趣的回应。 – Michal 2012-08-03 13:34:54