2010-10-19 15 views
7

no pude averiguar cómo insertar un valor booleano (para aparecer como key:true en la cadena JSON) en mi NSDictionary:Objective-C: ¿Cómo poner valores booleanos en el diccionario JSON?

NSMutableDictionary* jsonDict = [NSMutableDictionary dictionary]; 
[jsonDict setValue: YES forKey: @"key"]; 

El código anterior no se ejecuta (obviamente porque sí no es un objeto).
¿Cómo puedo lograr esto?

Respuesta

11

Inserta booleanos en un diccionario usando NSNumber. En este caso, se puede utilizar la expresión literal @YES directamente, junto con un literal diccionario, para hacer esto una sola línea:

NSDictionary *jsonDict = @{@"key" : @YES}; 

Para codificar a JSON, utiliza +[NSJSONSerialization dataWithJSONObject:options:error]:

NSError *serializationError; 
NSData *jsonData = [NSJSONSerialization 
        dataWithJSONObject:jsonDict 
        options:0 error:&serializationError]; 
if (!jsonData) { 
    NSLog(@"%s: error serializing to JSON: object %@ - error %@", 
      __func__, jsonDict, serializationError]; 
} 
+0

No estoy seguro de que responda el problema anterior. El formato JSON es diferente de NSDictionary debido a cómo se representa un booleano. ¿Qué harías si hay muchas plataformas que envían datos en formato JSON y quieres que todas tengan la misma representación (clave: verdadero)? – Ika

7

+ [NSNumber numberWithBool:] es la forma típica de agregar un valor booleano a un NSDictionary.

6

con literales de Objective-C, [NSNumber numberWithBool: SÍ] puede ser representado con sólo @YES,

puede crear su propio diccionario de este modo:

NSDictionary *jsonDict = @{@"key":@YES}; 
Cuestiones relacionadas