27

我有一个来自 Web 服务器的 JSON 响应,如下所示:

{"success":true, "token":"123456"}

我想在 if 语句中使用它,并将其与“YES”进行比较。

但是,这样做不起作用:

NSDictionary *response = [response JSONValue]; // the JSON value from webservice response, converted to NSDictionary

if ([response objectForKey:@"success"]){} // does not work
if ([response objectForKey:@"success"] == YES){} // does not work
if ([[response objectForKey:@"success"] integerValue] == YES) {} // does not work...erroneous probably

我该如何解决这个问题?布尔类型转换也会产生警告

4

2 回答 2

61

由于[response objectForKey:@"success"]不起作用,当您尝试时会发生什么[response valueForKey: @"success"]

我怀疑它返回一个 NSNumber ,然后您可以执行以下操作:

NSNumber * isSuccessNumber = (NSNumber *)[response objectForKey: @"success"];
if([isSuccessNumber boolValue] == YES)
{
    // this is the YES case
} else {
    // we end up here in the NO case **OR** if isSuccessNumber is nil
}

此外,您的控制台中是什么NSLog( @"response dictionary is %@", response );样子的?我看到您使用的 JSON 库确实返回 NSNumber 类型objectForKey,所以我怀疑您可能没有有效的 NSDictionary。

于 2011-11-25T08:21:44.150 回答
11

另一种不需要转换为 NSNumber 的方法如下所示:

if ([response objectForKey:@"success"])
{
    if ([[response objectForKey:@"success"] boolValue])
        NSLog(@"value is true");
}
于 2013-05-07T18:29:15.320 回答