2010-10-19 13 views
7

non riuscivo a trovare il modo di inserire un valore booleano (ad apparire come key:true nella stringa JSON) nel mio NSDictionary:Objective-C: come inserire valori booleani nel dizionario JSON?

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

Il codice di cui sopra non viene eseguito (ovviamente perché sì, non è un oggetto).
Come posso realizzare questo?

risposta

11

Inserisci i booleani in un dizionario utilizzando NSNumber. In questo caso, è possibile utilizzare l'espressione letterale @YES direttamente, insieme a un dizionario letterale, per rendere questo un one-liner:

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

per codificare a JSON, utilizzare +[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

Non sono sicuro che risponda al problema precedente. Il formato JSON è diverso da NSDictionary a causa di come viene rappresentato un booleano. Cosa faresti se ci fossero molte piattaforme che inviano dati in formato JSON e vuoi che tutti abbiano la stessa rappresentazione (chiave: vero)? – Ika

7

+ [NSNumero numeroWithBool:] è il modo tipico per aggiungere un valore booleano a un NSDictionary.

6

con letterali Objective-C, [NSNumber numberWithBool: SÌ] può essere rappresentato con un solo @YES,

È possibile creare il dizionario in questo modo:

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