如果我有一个JSON回应如下:转换JSON属性响应BOOL
"is_following": false,
我如何转换这在Objective-C布尔?
这似乎并没有是正确的:
[[NSNumber numberWithInt:(int)[profileData valueForKey:@"is_following"]] boolValue];
如果我有一个JSON回应如下:转换JSON属性响应BOOL
"is_following": false,
我如何转换这在Objective-C布尔?
这似乎并没有是正确的:
[[NSNumber numberWithInt:(int)[profileData valueForKey:@"is_following"]] boolValue];
它取决于您使用的JSON解析器。例如,在使用TouchJSON的情况下,您可以在解析对象上调用boolValue
:[[profileData objectForKey:@"is_following"] boolValue]
因为-valueForKey
返回一个对象(id
)和BOOL
是signed char
的别名,你可以简单地调用-intValue
的结果:
BOOL asBool = [[profileData valueForKey:@"is_following"] intValue];
为什么不直接拨打-boolValue
?
[profileData objectForKey:@"is_following"] boolValue]
任何JSON框架将是JSON false
值转换为NSNumber*
。实际上NSString*
也会对-boolValue
做出响应,所以如果发生脑死的JSON源发出"false"
,您仍然会被覆盖。但是,如果JSON包含null
或任何容器类型,那么您将遇到问题,因此您可能需要仔细检查该值的实际类别。 *请注意,我使用-objectForKey:
而不是-valueForKey:
,因为如果这是JSON,那么profileData
必须是NSDictionary*
。 -objectForKey:
是用于从NSDictionaries
提取数据的正确方法。
从现在开始使用JSONKit – xonegirlz
从JSONKit文档:'true'和'false'基本类型映射到NSNumber。所以这个解决方案应该可行 – onegray
看来JSONKit不会将@ 1或@ 0视为与[NSNumber numberWithBool:YES | NO]相同,当它是后者时,JSONKit将正确转换。 – Vamos