Значение iOS NSDictionary определяет, если логическое значение из JSON boolean
У меня есть ответ 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
Как я могу обойти это? Typecasting in boolean также дает предупреждение.
Ответы
Ответ 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, в которой вы используете возвращает типы NSNumber для objectForKey
, поэтому я подозреваю, что у вас может не быть допустимого NSDictionary.
Ответ 2
Альтернативный подход к этому, который не требует преобразования в NSNumber, выглядит следующим образом:
if ([response objectForKey:@"success"])
{
if ([[response objectForKey:@"success"] boolValue])
NSLog(@"value is true");
}