【问题标题】:iOS NSDictionary value determine if Boolean from JSON booleaniOS NSDictionary 值确定布尔值是否来自 JSON 布尔值
【发布时间】:2012-01-06 03:57: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

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

【问题讨论】:

  • 你是如何解析 JSON 响应的?
  • 问题被标记为 sbjson。我正在使用 ios 库 SBJSON stig.github.com/json-framework
  • 我忘了突出显示进行解析的代码,抱歉

标签: ios json sbjson


【解决方案1】:

由于[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。

【讨论】:

  • 您在NSLog 的第一个参数之前缺少@ 符号
  • 您可能想要实际测试类型而不是进行简单的强制转换,或者将此代码放在 try/catch 块中。否则,如果 JSON 发生更改,您可能会不小心将 boolValue 发送到 NSString(对于“Y”、“y”、“T”、“t”或数字 1-9,它将返回 YES),或者一个集合对象,会抛出异常。
  • 这个方案效果不好,时间长。简短的回答是 if([response objectForKey: @"success"] boolValue])
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2011-01-29
    • 2017-04-08
    • 2019-04-26
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多