2012-06-26 50 views
0

如果我有一个JSON回应如下:转换JSON属性响应BOOL

"is_following": false, 

我如何转换这在Objective-C布尔?

这似乎并没有是正确的:

[[NSNumber numberWithInt:(int)[profileData valueForKey:@"is_following"]] boolValue]; 

回答

1

它取决于您使用的JSON解析器。例如,在使用TouchJSON的情况下,您可以在解析对象上调用boolValue[[profileData objectForKey:@"is_following"] boolValue]

+0

从现在开始使用JSONKit – xonegirlz

+0

从JSONKit文档:'true'和'false'基本类型映射到NSNumber。所以这个解决方案应该可行 – onegray

+0

看来JSONKit不会将@ 1或@ 0视为与[NSNumber numberWithBool:YES | NO]相同,当它是后者时,JSONKit将正确转换。 – Vamos

0

因为-valueForKey返回一个对象(id)和BOOLsigned char的别名,你可以简单地调用-intValue的结果:

BOOL asBool = [[profileData valueForKey:@"is_following"] intValue]; 
0

为什么不直接拨打-boolValue

[profileData objectForKey:@"is_following"] boolValue] 

任何JSON框架将是JSON false值转换为NSNumber*。实际上NSString*也会对-boolValue做出响应,所以如果发生脑死的JSON源发出"false",您仍然会被覆盖。但是,如果JSON包含null或任何容器类型,那么您将遇到问题,因此您可能需要仔细检查该值的实际类别。 *请注意,我使用-objectForKey:而不是-valueForKey:,因为如果这是JSON,那么profileData必须是NSDictionary*-objectForKey:是用于从NSDictionaries提取数据的正确方法。