【问题标题】:JSONKit parsing issueJSONKit 解析问题
【发布时间】:2012-08-01 11:29:41
【问题描述】:

我收到这样的 JSON 对象:

{"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 是否存在使这些引号消失的已知问题?

【问题讨论】:

标签: ios xcode json jsonkit


【解决方案1】:

您将 NSDictionary 的“描述”输出与键的值混淆了。通过一些简单的侦探工作,您还可以为自己节省大量时间(即从您发布此信息到您得到一些响应的时间)。

我假设你上面所说的“输出”是

的结果
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]) );

我们这样做是因为这里显然有问题,我们想了解更多关于我们手头的物品的信息。我猜如果你按照上面的方法去做,你会发现一些你没想到的东西。

【讨论】:

  • 我没有调用 NSLog,但我相信它和在持有断点的同时调用po requetDictionary 是一样的。问题是,解析器实际上很好,它是控制台打印时髦的东西。我的程序实际上是因为在它出现之前弹出视图控制器而崩溃,而不是因为 if 不会发生(我忽略了错误放置的断点,因此 - “如果语句由于缺少引号而从未被调用”)。但感谢有趣的回应。
猜你喜欢
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多