iOS NSDictionary值确定布尔值是否来自JSON布尔值

yre*_*uta 27 json ios sbjson

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

{"success":true, "token":"123456"}
Run Code Online (Sandbox Code Playgroud)

我想在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
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ann 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
}
Run Code Online (Sandbox Code Playgroud)

另外,NSLog( @"response dictionary is %@", response );在您的控制台中看起来像什么?我看到你正在使用的JSON库确实返回了NSNumber类型objectForKey,所以我怀疑你可能没有有效的NSDictionary.


Sco*_*t D 11

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

if ([response objectForKey:@"success"])
{
    if ([[response objectForKey:@"success"] boolValue])
        NSLog(@"value is true");
}
Run Code Online (Sandbox Code Playgroud)