How do I get true/false (instead of "true"/"false") in json from a NSDictionary using NSJSONSerialization dataWithJSONObject? What keys should I store in the dictionary to get that?
Asked
Active
Viewed 3,615 times
5
-
This is the one area where mapping between JSON and Objective-C objects is slightly less than perfect, but generally `@YES`/`@NO` will work, as stated below. Do note, though that this has nothing to do with "keys". The keys in a dictionary/JSON "object" need to be strings. It's the *values* we're talking about. – Hot Licks Mar 14 '14 at 17:26
-
1@Daij-Djan Stop the harassment please. – Boon Mar 14 '14 at 18:53
-
possible dupe of http://stackoverflow.com/questions/13615451/how-do-i-get-nsjsonserialization-to-output-a-boolean-as-true-or-false – Daij-Djan Mar 14 '14 at 19:06
1 Answers
9
NSNumber
objects containing a BOOL
are mapped to JSON "true" and "false".
So just use @YES
, @NO
, or generally @(someBOOL)
. For example:
NSDictionary *dict = @{@"this is": @YES};
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// {"this is":true}

Martin R
- 529,903
- 94
- 1,240
- 1,382
-
1Why is NSJSONSerialization able to distinguish between @YES vs @(1) and output true for former and 1 for latter? – Boon Mar 14 '14 at 16:57
-
2@Boon: It probably uses the `objCType` method to get information about the type of the value. – Martin R Mar 14 '14 at 16:58
-
3@Boon Add code like this: `NSNumber *aBool = @YES; NSNumber *anInt = @1;`. Now use the debugger to look at the internal types generated by those two lines. You actually get two different internal types for those two objects. – rmaddy Mar 14 '14 at 17:00