2011-11-25 80 views
26

我有看起来像这样的web服务器的JSON响应:的iOS的NSDictionary值确定布尔从JSON布尔

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

,我想如果语句中使用,在一个,并将其与比较“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 

我如何解决此问题?在布尔类型转换也产生警告

+0

你是如何解析JSON响应? – tarmes

+0

这个问题被标记为sbjson。我正在使用ios库SBJSON http://stig.github.com/json-framework/ – yretuta

+0

我忘了突出显示解析代码,对不起 – yretuta

回答

60

因为[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库does return NSNumber types for objectForKey,所以我怀疑你可能没有一个有效的NSDictionary。

+0

这个工作。谢谢:) – yretuta

+0

也适合我! –

+0

您在'NSLog'的第一个参数前缺少'@'符号 –

11

的另一种方法这一点,它不需要转换为NSNumber的是一样的东西如下:

if ([response objectForKey:@"success"]) 
{ 
    if ([[response objectForKey:@"success"] boolValue]) 
     NSLog(@"value is true"); 
}