El valor de NSDictionary de iOS determina si Boolean de JSON boolean
sbjson (2)
Un enfoque alternativo a esto, que no requiere conversión a NSNumber, es algo como a continuación:
if ([response objectForKey:@"success"])
{
if ([[response objectForKey:@"success"] boolValue])
NSLog(@"value is true");
}
Tengo una respuesta JSON de un servidor web que se parece a esto:
{"success":true, "token":"123456"}
y quiero usar eso en una sentencia if, y compararlo con "YES".
Sin embargo, hacer esto no funciona:
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
¿Cómo puedo solucionar esto? Typecasting en Boolean produce una advertencia también
ya que [response objectForKey:@"success"]
no funciona, ¿qué sucede cuando prueba [response valueForKey: @"success"]
?
Sospecho que devuelve un NSNumber y luego puedes hacer algo como:
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
}
Además, ¿qué hace NSLog( @"response dictionary is %@", response );
Pareces en tu consola? Veo que la biblioteca JSON que está utilizando devuelve los tipos objectForKey
para objectForKey
, por lo que sospecho que es posible que no tenga un NSDictionary válido.