我正在使用NSJSONSerialization dataWithJSONObject将我的类序列化为JSON.当它序列化BOOL时,它在JSON字符串中给它赋值1或0.我需要这是真或假.这可能一般吗?
Jul*_*ert 26
当我创建时[NSNumber numberWithBool:NO],NSJSONSerialization在JSON字符串中返回单词"false".
编辑使用新的快捷方式,您还可以使用这些方便的人:
@(YES) / @(NO)
@(1) / @(0)
@YES / @NO
@1 / @0
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以避免循环使用您的值.我想要完全相反的行为,但有NSNumber对象.所以我必须循环......
编辑二
mbi在评论中指出iOS版本之间存在差异.所以这是一个iOS9测试:
NSDictionary *data = @{
@"a": @(YES),
@"b": @YES,
@"c": @(1),
@"d": @1
};
NSLog(@"%@", [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:data options:0 error:nil] encoding:NSUTF8StringEncoding]);
2016-07-05 02:23:43.964 Test App[24581:6231996] {"a":true,"b":true,"c":1,"d":1}
Run Code Online (Sandbox Code Playgroud)
jar*_*ker 14
我自己跑了过来,不确定这是不是最好的答案,但......
确保使用@YES或@NO,然后输出的json将包含true/false:
[NSJSONSerialization dataWithJSONObject:@{@"test": @YES} options:0 error: nil];
Run Code Online (Sandbox Code Playgroud)
所以当你放入dataWithJSONObject的字典时,你将不得不转换你的其他"布尔值"/布尔值 - > @YES/@NO.
[NSJSONSerialization dataWithJSONObject:@{@"test": (boolLikeValue ? @YES : @NO)} options:0 error: nil];
Run Code Online (Sandbox Code Playgroud)
小智 5
是的,可以通过使用kCFBooleanTrue和kCFBooleanFalse使用NSJSONSerialization输出布尔值(真/假):
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:kCFBooleanTrue, @"key_1",
kCFBooleanFalse, @"key_2",
nil]
Run Code Online (Sandbox Code Playgroud)
然后
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:&error];
Run Code Online (Sandbox Code Playgroud)
不,Bool 的基础对象是NSNumber numberWithBool,它要么变成 0,要么变成 1。我们没有Bool对象。同样去读书JSON。真/假将再次成为NSNumber。
您可以创建一个Bool类并构建您自己的解析器。数组是数组,JSON对象是NSDictionary。您可以查询键,测试后面的类并JSON从中构建字符串。
| 归档时间: |
|
| 查看次数: |
13194 次 |
| 最近记录: |